-1

我有一个 AjaxCall.aspx 页面,该页面将由 .ajax() 使用 jquery 调用另一个页面。在 AjaxCall.aspx 我删除了所有的 html 标签,只留下了

<%@ 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 请求,我注意到每次我向 AjaxCall.aspx 页面发出 ajax 请求时,它都会连续请求两次。后来我进入调试模式检查并发现页面加载事件触发了两次。我做了一些挖掘,发现一个空的img src与此有关,但问题是我在AjaxCall.aspx页面中没有任何html标签!

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

我的 AjaxCall.aspx 中不能有这些 html 标记,因为它假设在请求时返回 json 格式的数据,拥有这些 html 标记将在调用它的任何页面上导致错误。同时,我不希望它在每次调用时都继续加载两次。那么有没有办法克服这个问题呢?

4

1 回答 1

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.writea之前使用Response.Clear以清除可能由任何代码注入的可选内容,以确保仅发送此内容。

于 2013-02-08T04:27:13.483 回答