Comment détecter / suivre postback en javascript?

Comment détecter, de suivre et de vérifier publication en javascript(e.g dans asp.net Page.isPostBack ())? Toute suggestion?

23
demandé sur o.k.w 2009-12-07 06:11:56

10 réponses

ASPX:

<input type="hidden" id="_ispostback" value="<%=Page.IsPostBack.ToString()%>" />

script côté Client:

function isPostBack() { //function to check if page is a postback-ed one
  return document.getElementById('_ispostback').value == 'True';
}

PS: Je ne l'ai pas testé mais j'ai fait quelque chose de similaire avant et cela fonctionne.

40
répondu o.k.w 2013-10-25 14:45:28

dans certains cas, vous pouvez vouloir vérifier pour postback sans n'importe quel code côté serveur. Par exemple, dans SharePoint, vous ne pouvez pas avoir de blocs de code dans les pages SharePoint Designer, donc vous ne pouvez pas utiliser une solution qui nécessite <%=something %>. Voici une alternative qui n'implique aucun code côté serveur:

<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>

une mise en garde (ou une caractéristique, selon la façon dont vous la regardez), cela détectera non seulement les postbacks, mais toute instance où la page se lie à elle-même.

17
répondu Daniel 2011-07-12 19:31:56

si vous voulez vérifier si la page courante sera un postback si l'utilisateur clique sur un bouton Soumettre, vous pouvez vérifier la présence de ViewState:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="xxxxx" />

vous pouvez utiliser quelque chose comme document.getElementById("__VIEWSTATE") ou l'équivalent jQuery.

cependant, si vous voulez voir si la page actuelle a été générée en réponse à un postback, alors vous devez insérer ces données dans la page du côté du serveur en premier.

pour exemple:

function isPostBack() {
  return <%= Page.IsPostBack %>;
}
9
répondu RickNZ 2009-12-07 11:11:14

comme JavaScript ne devrait pas être écrit avec du code côté serveur, et l'injection de nouveaux éléments dans la page semble comme exagérée, il me semble que la solution la plus simple est d'ajouter [datat-*] attributs à <head> élément:

Dans Page_Load:
Page.Header.Attributes["data-is-postback"] IsPostBack ? "true" : "false";

on peut alors y accéder par:

jQuery:
$('head').data('isPostback');
Vanilla js:
document.head.getAttribute('data-is-postback') === 'true';

bien sûr, si vous traitez l'attribut [data-is-postback] comme un attribut booléen, vous pouvez aussi utiliser:

Dans 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
répondu zzzzBov 2013-01-25 21:17:03

voir:

<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>
4
répondu Brij 2009-12-07 06:47:06

j'ai une solution qui a fonctionné pour moi.

// Postback catch
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function (s, e) {
    alert("post back");
});
4
répondu user4640122 2015-03-06 08:53:18

vous ne pouvez garder la trace du postback que si vous utilisez des requêtes AJAX ou si vous avez un champ caché d'une sorte que le javascript lit sur le chargement de page. Sinon, la page est régénérée et toutes les données POST sont perdues; comme vous vous y attendiez et l'espérez.

0
répondu Robert Massaioli 2009-12-07 03:22:40

Voici la solution en utilisant jQuery:

$("a[href^='javascript:__doPostBack']").click(function () {
    alert('ok');
});
0
répondu Misha 2013-07-25 14:07:15

sur Page_Load sur votre serveur : Ce qui suit utilise une surcharge de RegisterClientScriptBlock () qui entourera notre chaîne de caractères avec les balises de script nécessaires

Côté Serveur

if (Page.IsPostBack){
   ClientScript.RegisterClientScriptBlock(GetType(),
            "IsPostBack", "var isPostBack = true;", true);
}

ensuite dans votre script qui s'exécute pour l'onLoad, Vérifiez l'existence de cette variable.

if (isPostBack){
   //do something here
}
0
répondu Lequoa 2017-02-14 11:31:37

cela devrait fonctionner pour ASP.Net pages sans utilisation d'un backend variable/control fournie:

function isPostBack(frmID) {
    var eventtarget = "";
    var eventargument = "";

    if (!!frmID) {
        if (document.forms.length == 0) return false;

        sForm = document.forms[0];
    }
    else {
        sForm = document.getElementById(frmID);

        if (!sForm) return false;
    }

    if (sForm.__EVENTTARGET) eventtarget = sForm.__EVENTTARGET.value;
    else return false;

    if (sForm.__EVENTARGUMENT) eventargument = sForm.__EVENTARGUMENT.value;
    else return false;

    if (eventtarget != "" || eventargument != "") return true;
    else return false;
}
0
répondu Olymp Medco 2018-07-06 15:56:11