2013-02-08 2 views
-1

J'ai une page AjaxCall.aspx qui sera appelée une autre page par .ajax() en utilisant jquery. A AjaxCall.aspx j'avais enlever toute la balise html et à gauche neAjax page d'appel charger deux fois Asp.net

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AjaxCall.aspx.cs" Inherits="_AjaxCall" %> 

et le code derrière était un simple sur l'événement pageload.

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.write("{ \"Testing\": \"Hello World!\" }"); 
} 

Je surveille la demande ajax dans les outils de développement Google Chrome en réseau et je remarque que chaque fois que je fais une demande ajax à la page AjaxCall.aspx, il a demandé deux fois de suite. Plus tard, je suis allé en mode débogage pour vérifier et découvrir que l'événement pageload a tiré deux fois. J'ai fait quelques recherches et j'ai trouvé qu'un img src vide avait quelque chose à voir avec ça, mais le problème est que je n'ai aucune balise html dans la page AjaxCall.aspx! J'ai ensuite essayé de rajouter le corps HTML et le tag de formulaire, et j'essaie d'appeler à nouveau cette page, et une bonne nouvelle est de le charger une fois, mais dès que j'ajoute ces balises html à AjaxCall.aspx, ça charge deux fois encore.

Je ne peux pas avoir ces balises html à mon AjaxCall.aspx parce qu'il suppose renvoyer des données au format json quand il est demandé, avoir ces balises html provoquera une erreur sur n'importe quelle page qui l'a appelé. En même temps je ne veux pas qu'il continue à charger deux fois sur chaque appel que j'ai fait. Donc, y a-t-il moyen de surmonter ce problème?

Répondre

2

Si vous souhaitez fournir une réponse JSON avec la page d'application (.aspx et le code derrière), vous devez vider votre réponse et la fermer afin d'arrêter le processus.

Si vous ne le faites pas, la page .aspx sera de retour, peut-être avec une balise HTML générant une demande multiple (comme img src avec un mauvais)

Essayez ceci:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.write("{ \"Testing\": \"Hello World!\" }"); 
    Response.Flush(); 
    Response.End(); 
} 

De plus, vous pouvez également utiliser avant votre Response.write un Response.Clear afin d'effacer le contenu optionnel qui aurait pu être injecté par n'importe quel code, juste pour être sûr de n'envoyer que ce contenu.