在 JSONP-Ajax 请求后获取 JSON 元素的奇怪错误

Posted

技术标签:

【中文标题】在 JSONP-Ajax 请求后获取 JSON 元素的奇怪错误【英文标题】:Strange error getting a JSON element after a JSONP-Ajax request 【发布时间】: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,所以调用了错误函数...

我哪里错了?

【问题讨论】:

【参考方案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"

【讨论】:

以上是关于在 JSONP-Ajax 请求后获取 JSON 元素的奇怪错误的主要内容,如果未能解决你的问题,请参考以下文章

ajax 请求 对json传的处理 Jquery 使用Ajax获取后台返回的Json数据后,页面处理

访问 JSON 对象中的项目以获取获取请求

python无限遍历,实现在多维嵌套字典列表元组的JSON中获取数据

JSON请求后以编程方式TableView不会重新加载数据

JSON请求后的IOS/Swift渲染表

ajax获取数据后怎么去渲染到页面