2013-03-27 48 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; 
      } } 
}); 

如果你不問這個問題在考慮到$阿賈克斯()方法,然後.....沒關係。 :-)