2013-02-08 131 views
-1

我有一个AjaxCall.aspx页面,它将通过.ajax()使用jquery调用另一个页面。 在AjaxCall.aspx我不得不删除所有HTML标记只留下Ajax调用页面加载两次Asp.net

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

,并在其背后的代码是在页面加载事件的简单。

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

我监视网络的Chrome开发者工具Ajax请求,我注意到,每次我做一个Ajax请求AjaxCall.aspx页面时,它连续两次请求。后来我进入调试模式来检查并发现页面加载事件触发两次。 我做了一些挖掘,发现一个空的img src与此有关,但问题是我在AjaxCall.aspx页面中没有任何html标记!

我后来试图添加回HTML身体和表单标记,并尝试再次调用该页面,好消息是它加载一次,但只要我将这些HTML标记添加回AjaxCall.aspx,它加载再次两次。

我不能在我的AjaxCall.aspx上有这些html标签,因为它会在请求时返回一个json格式数据,让这些html标签在任何调用它的页面上都会导致错误。同时,我不希望它在我所做的每次通话中继续加载两次。那么无论如何要克服这个问题呢?

回答

2

如果您想通过应用程序页面(.aspx和后面的代码)提供JSON响应,您必须刷新您的响应并关闭它以停止该过程。

如果你不这样做,在网页的.aspx将是回报,可能与某些HTML标签生成多个请求(如不良SRC IMG)

试试这个:

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

此外,您也可以在使用Response.write a Response.Clear之前使用以清除任何代码可能注入的可选内容,只能确保仅发送此内容。