Ajax调用页面加载两次Asp.net

时间:2013-02-08 04:07:23

标签: c# jquery asp.net ajax

我有一个AjaxCall.aspx页面,它将被.ajax()使用jquery称为另一个页面。 在AjaxCall.aspx中,我删除了所有的html标记,只留下了

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

并且在它背后的代码是一个简单的pageload事件。

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

如果你不这样做,页面.aspx将会返回,可能会有一些HTML标签生成多个请求(比如img with bad src)

试试这个:

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

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

相关问题