我有一个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标记会在调用它的任何页面上导致错误。与此同时,我不希望它在每次通话时都继续加载两次。那么无论如何都要克服这个问题吗?
答案 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
之前使用,以便清除可能由任何代码注入的选项内容,以确保只发送此内容。