5

给定一个 ajax 调用,例如:

$.ajax(
{
    url:"MyWebService.blah",
    data: {"data":"awesome"},
    success : function(responseText)
    {
       var myJsonObj = $.parseJSON(responseText);
       //do stuff with myJsonObj
    }
});

这工作正常。我今天将 jQuery 更新到 1.9(我在 1.6 上使用了一段时间)作为 Safari 突然不支持各种切换功能的可能修复(关于 eventLayer.X 的东西不再支持),现在我所有的 ajax 调用都抛出了以下javascript错误:

Uncaught Syntax Error: Unexpected token o

经过一些研究和测试,我发现上面代码中的“responseText”现在是一个 JSON 对象,而不是字符串。所以这个错误是有道理的,但我正试图解决这个问题。jQuery 真的改变了默认返回类型吗?我检查了文档:

http://api.jquery.com/jQuery.ajax/

并且 dataType 默认为“智能猜测”。我可以看到这可能很方便,但我也不喜欢它。

所以这是我的问题:

  1. 这是 jQuery 的一个新的(ish)变化吗?
  2. 是 1.9 版做到了这一点,还是以前是这样的,我是一个一直在使用 1.6 的化石?
  3. 有什么建议可以处理这个问题以及我的代码“面向未来”吗?

这是一个非常根本的变化,会影响很多代码。我将检查我的代码并删除任何将我返回的数据解析为 JSON 的实例,但这整件事有点令人不安。我没有指定数据类型是不是弄错了?我认为强制执行 dataType 而不是依赖默认值是一个好习惯,但是......哇。我是独自一人,还是 jQuery 的改变有点冒昧?

4

1 回答 1

6

如果没有设置数据类型,jQuery 会根据返回的内容自动检测数据类型。很可能 1.9 只是改进了该检测以正确检测您以 json 形式返回的内容。最好始终提供数据类型以确保您始终获得一致的结果。

于 2013-04-12T18:01:24.067 回答