2011-02-03 74 views
10

我剛從版本1.4升級到版本1.5的jQuery,現在我的AJAX調用總是失敗,出現「無效標籤」錯誤。jQuery 1.5 AJAX調用失敗,JSON請求的「無效標籤」

一個例子的要求是:

jQuery.ajax({ 
    async: false 
    , dataType: "json" 
    , error: function (xhr, status, error) { ... } 
    , success: function (data, status, xhr) { ... } 
    , type: "post" 
    , url: "ajax/request.asp" 
}); 

在我發現當返回的JSON不使用jQuery的回調包裹(這個錯誤引發如jQuery1234({ "something": "abcd" })

的問題是,我回來了網。一個JSON,而不是JSONP(我在AJAX請求中聲明它),所以爲什麼我必須在返回的JSON中指定一個回調函數?

1.5 changelog對此沒有提及......(或者是我不能讀?)

更新:

這是一個不工作的JSON的例子:

{ 
    "esito":"Ok", 
    "centriCosto":[ 
     { 
     "id":"1", 
     "descrizione":"Colazione" 
     }, 
     { 
     "id":"2", 
     "descrizione":"Pranzo" 
     }, 
     { 
     "id":"3", 
     "descrizione":"Cena" 
     } 
    ] 
} 

這是相同的回調包裹的工作JSON:

jQuery1502710949228847014_1296739130498({ 
    "esito":"Ok", 
    "centriCosto":[ 
     { 
     "id":"1", 
     "descrizione":"Colazione" 
     }, 
     { 
     "id":"2", 
     "descrizione":"Pranzo" 
     }, 
     { 
     "id":"3", 
     "descrizione":"Cena" 
     } 
    ] 
}) 

順便說一句,螢火蟲他們倆都是有效的JSON(他對正確性非常挑剔)。

+0

這可能是使用JSON本身的問題,我已經注意到,由於1.4 JQ一直嚴格得多約JSON結構。我的第一個JSON項目從'07開始失敗了,當我升級我的JQ時,我打開了JSON輸出,並且陷入了我構建它的糟糕程度。你可以發佈JSON嗎? – picus 2011-02-03 13:14:02

+0

@picus:不,我對多個驗證器驗證了我的JSON,沒關係。如果我實現JSONP回調,它會再次開始工作,所以它不是格式問題。 – Albireo 2011-02-03 13:18:25

+0

@picus:我已經添加了一個不工作和工作JSON的例子。 – Albireo 2011-02-03 13:24:06

回答

28

好吧,我發現到底發生了什麼。

jQuery的Validation plug-in與jQuery 1.5不兼容(請參閱onetwo),將插件合格率消除爲正確的行爲。

如果別人有這個問題,有一個在插件的倉庫補丁:link

1

嘗試: 難道在jQuery的1.5.js JSON的快速搜索,發現這個在6905行:

//檢測,標準化選項和JSONP安裝回調要求

jQuery.ajaxPrefilter("json jsonp", function(s, originalSettings, dataIsString /* internal */) { 

從第一個參數取出"json"將在規範中添加正確的行爲。 dataType:"json"

5

我居然遇到了類似的問題,但它似乎與此有關的bug:http://bugs.jquery.com/ticket/8398

它不一定與jQuery的驗證和我花了一段時間才能理出頭緒。事實證明,jQuery 1.5正在修改後續的json調用json到jsonp,導致這個錯誤。

我固定它通過以下的錯誤更改歷史記錄建議的解決方法之一,並把我的Ajax調用是由之前的地方下面的代碼:

$.ajaxSetup({ 
    jsonp: null, 
    jsonpCallback: null 
}); 

應該解決其他Ajax請求的任何問題了。

1

如果您的服務器端代碼依賴於以「jsonp」開頭的回調名稱,則可能有問題。在版本1.5中,回調名稱前綴更改爲「jQuery」。

1

看起來像這樣現在在v1.6中修復 - 在升級到1.6後升級到版本1.5.1後升級到版本1.5.1後,同樣的問題消失了。

2

以下是使用validator插件的人員可能的解決方法。

dataType:「text json」

工程就像一個魅力。不要問我爲什麼。在chrome上,你可以看到在json返回時解析「:」的jQuery語法錯誤。並且不要誤解,返回是有效的json。我沒有嘗試過,但我懷疑湯姆的上述答案也適用。

0

更新到jQuery的1.7解決它

0

這裏的解決方案:

$.post("...", {}, 
     function(data) { 

     // dont forget to add below lines   

     },"json");