Как обнаружить/отслеживать/проверять обратную передачу в javascript (например, в asp.net Page.isPostBack())? Любое предложение?
Как обнаружить/отслеживать обратную передачу в javascript?
Ответ 1
ASPX:
<input type="hidden" id="_ispostback" value="<%=Page.IsPostBack.ToString()%>" />
Клиентская сторона Script:
function isPostBack() { //function to check if page is a postback-ed one
return document.getElementById('_ispostback').value == 'True';
}
PS: Я не тестировал его, но я уже делал нечто подобное раньше, и он работает.
Ответ 2
В некоторых случаях вы можете проверить обратную передачу без какого-либо кода на стороне сервера. Например, в SharePoint вы не можете иметь блоки кода на страницах SharePoint Designer, поэтому вы не можете использовать какое-либо решение, для которого требуется <% = something% > . Вот альтернатива, которая не включает серверный код:
<script type="text/javascript">
function isPostBack()
{
return document.referrer.indexOf(document.location.href) > -1;
}
if (isPostBack()){
document.write('<span style="color:red;">Your search returned no results.</span><br/>');
}
</script>
Одно предостережение (или функция, в зависимости от того, как вы на это смотрите), это обнаруживает не только обратные вызовы, но и любой экземпляр, где страница ссылается на себя.
Ответ 3
Если вы хотите проверить, будет ли текущая страница обратной почтой, если пользователь нажимает кнопку отправки, вы можете проверить наличие ViewState:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="xxxxx" />
Вы можете использовать что-то вроде document.getElementById("__VIEWSTATE")
или эквивалент jQuery.
Однако, если вы хотите увидеть, была ли создана текущая страница в ответ на обратную передачу, вам необходимо сначала вставить эти данные на страницу со стороны сервера.
Например:
function isPostBack() {
return <%= Page.IsPostBack %>;
}
Ответ 4
Так как JavaScript не должен быть написан с использованием кода на стороне сервера, а ввод новых элементов на страницу кажется излишним, мне кажется, что самым простым решением является добавление [datat-*]
атрибут <head>
:
Page.Header.Attributes["data-is-postback"] IsPostBack ? "true" : "false";
К этому можно обратиться как:
<Суб > JQueryсуб >$('head').data('isPostback');
Vanilla JS:document.head.getAttribute('data-is-postback') === 'true';
Конечно, если вы относитесь к атрибуту [data-is-postback]
как к логическому атрибуту, вы также можете использовать:
if (IsPostBack)
{
Page.Header.Attributes.Add("data-is-postback", "");
}
else
{
Page.Header.Attributes.Remove("data-is-postback");
}
<Суб > JQueryсуб > $('head').is('[data-is-postback]');
Vanilla JS:document.head.hasAttribute('data-is-postback')
Ответ 5
Смотрите следующее:
<script type="text/javascript">
function invokeMeMaster() {
var chkPostBack = '<%= Page.IsPostBack ? "true" : "false" %>';
if (chkPostBack == 'false') {
alert('Only the first time');
}
}
window.onload = function() { invokeMeMaster(); };
</script>
Ответ 6
У меня есть решение, которое сработало для меня.
// Postback catch
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function (s, e) {
alert("post back");
});
Ответ 7
Вы можете отслеживать только обратную передачу, если используете AJAX-запросы или имеете скрытое поле, которое javascript читает при загрузке страницы. В противном случае страница будет восстановлена и все POST-данные будут потеряны; как вы ожидали бы и надеетесь.
Ответ 8
Вот решение, использующее jQuery:
$("a[href^='javascript:__doPostBack']").click(function () {
alert('ok');
});
Ответ 9
на странице_Load на стороне сервера: Ниже приведена перегрузка RegisterClientScriptBlock(), которая будет окружать нашу строку необходимыми тегами script
на стороне сервера
if (Page.IsPostBack){
ClientScript.RegisterClientScriptBlock(GetType(),
"IsPostBack", "var isPostBack = true;", true);
}
Затем в вашем script, который выполняется для onLoad, проверьте наличие этой переменной.
if (isPostBack){
//do something here
}