【问题标题】:Strange error getting a JSON element after a JSONP-Ajax request在 JSONP-Ajax 请求后获取 JSON 元素的奇怪错误
【发布时间】:2012-03-14 22:41:19
【问题描述】:

这是我的要求:

$.ajax({
    url: 'http://www.mywebsite.com/folder/mypage.aspx',
    dataType: 'jsonp',
    success: function(result) {
        console.log(result);
    },

    error: function(jqXHR, textStatus, errorThrown) {
        console.log(textStatus + " - " + errorThrown);
    }                
});

并从 mypage.aspx(在 .cs 上)我提出了这个:

Response.Write("{ html: '" + "Hello I'm a string" + "'}");

但我得到parsererror - Error: jQuery17100985457205879069_1330089260383 was not called,所以调用了错误函数...

我哪里错了?

【问题讨论】:

    标签: c# jquery ajax json jsonp


    【解决方案1】:

    您没有返回正确的 JSONP 结果。

    您需要返回包装在函数调用中的对象,该对象调用查询字符串中指定的函数。此外,您必须在使用撇号分隔字符串时转义字符串中的撇号:

    Response.Write(Request.QueryString["callback"] + "({ html: '" + "Hello I\\'m a string" + "'})");
    

    旁注:响应中的对象不是有效的 JSON,但它不一定是有效的,因为它没有被解析为 JSON,而是被解析为 Javascript。您可以返回有效的 JSON 以作为衡量标准:

    Response.Write(Request.QueryString["callback"] + "({ \"html\": \"" + "Hello I'm a string" + "\"})");
    

    【讨论】:

    • 正确,但是请注意他使用的是 C# 而不是 VB
    • @Ingenu:起初我对您的评论感到困惑,因为我编写了 C# 代码,但后来我注意到我在 Request.QueryString 调用中使用了括号而不是方括号。感谢您发现这一点。
    【解决方案2】:

    您必须将您的响应放入“函数”中。它的名称在callback GET 参数中说明,您必须使用它。所以结果会是

    // this function has different name each request
    jQuery17100985457205879069_1330089260383({html: "Hello, I'm a string"});
    

    这么简单,把你的线路改成

    Response.Write(Request["callback"]+"({ html: \"Hello I'm a string\"});");
    

    【讨论】:

    • 我在 .NET 3.5 上,不能使用 Querystring 作为方法?!?!或者,至少,它是这样说的......
    • 似乎有效!为什么会有这种行为?这种东西是jquery标准行为吗?
    【解决方案3】:

    尝试设置类似这样的内容类型 Respone.ContentType = "application/json"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 2020-04-23
      • 2014-07-06
      相关资源
      最近更新 更多