2013-03-27 94 views
1

jQuery从版本1.9.0开始改变了$ .parseJSON的实现,我们确实依赖于早期版本的jQuery解析为null和空串,例如jQuery过去不会抛出异常,并会返回null和空字符串的空值。

我们想要使用最新版本的jQuery,它在编写本文时是1.9.1,但是替换了$ .parseJSON的实现。

文档说明从jQuery的变化:http://api.jquery.com/jQuery.parseJSON/

有一些JavaScript,我们可以用它来告诉jQuery的与另一个同名的实施/功能来代替$ .parseJSON功能,它的“自然”版本.. 。jQuery 1.8.3的版本?

http://code.jquery.com/jquery-1.8.3.js有我们需要的函数的实现。

+0

你有没有试过迁移插件?或者你可以简单地自己测试它,如果它是空白的,向前跳到空,否则,将它传递给$ .parseJSON – 2013-03-27 03:43:22

+0

我认为这是一个坏主意,仍然如果你想复制并粘贴到你的本地jquery文件的方法,但你不能使用任何CDN – 2013-03-27 03:46:59

+0

在你自己的代码中使用'jQuery.parseJSON(notReallyJSONVariable‖“null”)'应该这样做。如果'notReallyJSONVariable'是一个空字符串,'null'或其他非JSON值的falsy值,那么将返回一个'null'。此解决方案也是[由jQuery Migrate插件建议](https://github.com/jquery/jquery-migrate/blob/master/warnings.md#jqmigrate-jqueryparsejson-requires-a-valid-json-string)你用吧。 – 2013-03-28 13:57:48

回答

2

如果你一定要,做这种方式:

jQuery._parseJSON = jQuery.parseJSON; 

jQuery.parseJSON = function(data) { 

    if (!data || typeof data !== "string") { 
     return null; 
    } 

    return jQuery._parseJSON(data); 

} 
1

我不会推荐它,但如果你仍然想这样做

创建一个jQuery的override.js文件和下面的内容添加到它

jQuery.parseJSON = function(data) { 
     if (!data || typeof data !== "string") { 
      return null; 
     } 

     // Make sure leading/trailing whitespace is removed (IE can't handle it) 
     data = jQuery.trim(data); 

     // Attempt to parse using the native JSON parser first 
     if (window.JSON && window.JSON.parse) { 
      return window.JSON.parse(data); 
     } 

     // Make sure the incoming data is actual JSON 
     // Logic borrowed from http://json.org/json2.js 
     if (rvalidchars.test(data.replace(rvalidescape, "@") 
      .replace(rvalidtokens, "]") 
      .replace(rvalidbraces, ""))) { 

      return (new Function("return " + data))(); 

     } 
     jQuery.error("Invalid JSON: " + data); 
    } 

然后包括后该文件jQuery的1.9.1.js文件

+0

如果你采取这个建议,一定要包括jQuery的许可证,因为它是该代码的副本/面食。 – 2013-03-28 13:59:17

0

如果你的问题是相关的$ .parseJSON()调用发生在jQuery的上下文中$ .ajax()方法,那么这里是一个很好的解决方案。您可以通过设置像这样一个转换器覆盖从JSON字符串JS对象的默认转换:

$.ajaxSetup({ 
      converters: { "text json": function (jsonString) { 
       var jsonObj = mySpecialParsingMethod(jsonString); 
       return jsonObj; 
      } } 
}); 

如果你不问这个问题在考虑到$阿贾克斯()方法,然后.....没关系。 :-)