0

请帮助我解决以下情况:

页面 p1.aspx 只有一个按钮:

<button id="btn1" onclick="btnclick();">Button</button>    
<script type="text/javascript">
  $('#btn1').click(function () {
    $.getJSON("http://localhost/p2.aspx", function (data) {
      $.each(data, function (i, field) {            
        alert(field);
      });
    });
  });
</script>

以上是我想通过 javascript 获取 JSON 文本的方式。

Web 应用程序http://localhost/p2.aspx被重定向到http://localhost/p3.aspx里面。页面http://localhost/p3.aspx再次被重定向回 http://localhost/p2.aspx?code=1.

code=1

是我想在我的 javascript 代码中读取的值。但它不起作用。

在 p2.aspx 我生成 JSON 数据如下

Response.Clear();
Response.ContentType = "application/json; charset=utf-8";
Response.Write(jsonString);
Response.End();

在此之后我无法通过 javascript 读取 json 数据。但是,如果我只是 http://localhost/p2.aspx通过网络浏览器放置它,那么它会在页面上获取 json 数据。

4

1 回答 1

3

JSONP如果你想让它工作,你需要使用它。

所以你的脚本应该考虑到callback参数:

Response.Clear();
string callback = Request["callback"];
if (!string.IsNullOrEmpty(callback))
{
    Response.ContentType = "application/javascript; charset=utf-8";
    Response.Write(string.Format("{0}({1})", callback, jsonString));
}
else
{
    Response.ContentType = "application/json; charset=utf-8";
    Response.Write(jsonString);
}
Response.End();

然后在客户端:

$.getJSON("http://localhost/p2.aspx?callback=?", function (data) {
    ...
});

请注意callback查询字符串参数是如何设置为?. 基本上 jQuery 会将其转换为如下所示的请求:

http://localhost/p2.aspx?callback=jQuery123456789....

并且您的服务器端脚本当然应该返回包含在回调名称JSONP中的字符串:JSON

jQuery123456789....({"code":1})

还要确保jsonString代码中使用的变量是实际的 JSON 字符串(顾名思义)。因为您在问题 ( code=1) 中显示的内容与 JSON 相去甚远。

于 2013-07-31T20:24:28.997 回答