我做了以下JQuery(v1.5.1)Ajax调用:
function testAjaxCall()
{
$.ajax(
{
url: "/Search.ashx?",
dataType: "json"
});
}
此调用返回以下JSON结果:
{ "objectData" : "100" }
但在IE9中它失败并出现以下错误(在其他浏览器中工作正常):
SCRIPT1004:预期';' debug.finance.com,第1行第16行
如果删除dataType:json参数,则调用成功。知道什么是错的吗?我假设我的JSON不正确,但我通过验证器传递它并且它没有报告任何错误。
请帮忙!
编辑:(更详细)
我在ASP.NET HTTP Handler中从服务器输出JSON,如下所示:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
context.Response.Write("{ \"objectData\" : \"100\" }");
return;
}
答案 0 :(得分:1)
您是否在服务器端脚本中使用了JSON编码,或者您自己“构建它”了吗?
当我第一次开始摆弄JSON时,我错误地认为你可以构建一串字符,包括花括号,方括号,冒号等。当我使用浏览器开发人员工具检查XHR时,一切都很好,除了收到的是一串字符而不是对象。
然后我了解到你可以在服务器端获取数据并使用(例如在php中) json_encode() 编码您的数据,然后您可以像在此处一样使用JQUERY数据类型JSON来解析返回的Javascript对象。
这不是完全相同的问题,但我的问题here应该提供更多有关正在发生的事情的背景信息。
答案 1 :(得分:0)
由于这个(稍微不相关)的帖子,我弄清楚问题是什么:jQuery 1.5 AJAX call fails with "invalid label" for JSON requests
罪魁祸首是jquery.validate,它与JQuery v1.5不是100%兼容。一旦我删除它IE9就完美了!
我升级到jquery.validate v1.8,现在一切都很好。
答案 2 :(得分:0)
这里的根本问题是IE9不支持JSON而非AJAX。相反,对于该浏览器,您需要使用JSON-P。
请参阅:JavaScript: How do I create JSONP?
在客户端,更改dataType,如下所示:
// Fall back to JSON-P for IE9 and lower:
dataType: (('withCredentials' in new XMLHttpRequest ()) ? 'json' : 'jsonp'),
在服务器端,就在发出JSON之前,执行:
// In JSON-P mode, wrap the JSON with the callback name and brackets:
if (isSet ($_GET['callback']) && preg_match ('/^([_a-zA-Z0-9])$/', $_GET['callback']) ) {
$json = $_GET['callback'] . '(' . $json . ');';
}