在 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数据后,页面处理