为什么以下JQuery Ajax调用导致IE9中的脚本错误?

时间:2011-04-28 09:32:41

标签: json jquery internet-explorer-9

我做了以下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;
}

3 个答案:

答案 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 . ');';
}