Подтвердить что ты не робот

Как обнаружить/отслеживать обратную передачу в javascript?

Как обнаружить/отслеживать/проверять обратную передачу в javascript (например, в asp.net Page.isPostBack())? Любое предложение?

4b9b3361

Ответ 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_Load:
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] как к логическому атрибуту, вы также можете использовать:

В Page_Load:
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
}