2012-01-20 144 views
6

的我有一個簡單的Ajax調用是這樣的:jQuery.ajax返回JSONP而不是JSON

$.ajax({ 
     url: u, type: "POST", dataType: "json", 
     data: data, 
     success: function (d) { response($.map(d, function (o) { return { label: o.Text, value: o.Text, id: o.Id} })); } 
}); 

這是一個TB自動完成不工作只在一個視圖的一部分。 它不起作用的原因是,而不是json,它使jsonp請求(通過嗅探,我看到它調用傳遞的url與?callback=jQueryxxxxxxxxx),並且永遠不會調用成功函數,因爲jquery將其打包到匿名函數,其名稱在回調中傳遞參數和服務器返回標準JSON(我不想使用JSONP,因爲它是POST請求,而不是跨域請求)。我檢查了當前視圖url和這個u的ajax url參數都在http://localhost:8080/myapp/areax/...,所以我不明白爲什麼jQuery使得JSONP請求在這裏。

編輯:

觀上,這並不工作已經URL請求時是這樣的: 阿賈克斯的http://hostname:8080/AreaName/Report/ViewReport 和u參數就像/AREANAME/MyAutoComplete /搜索,所以完整的URL到自動完成由像 http://hostname:8080/AreaName/MyAutoComplete/Search?callback=jQuery151013129048690121925_1327065146844

服務器的迴應是這樣的:

[{"Id":2,"Text":"001"},{"Id":7,"Text":"002"}] 

我知道這是不是JSONP,對於它應該是

<script> 
jQuery151013129048690121925_1327065146844([{"Id":2,"Text":"001"},{"Id":7,"Text":"002"}]); 
</script> 

但我想進行正常的JSON請求,沒有JSONP。

UPDATE

最古怪的所有東西(我開始認爲這是其中的項目中使用jQuery的V1.5.1中的錯誤)是,當我刪除dataType: "json",它使一個正常的JSON請求:)

因此,而不是如何讓JSON請求,現在我會接受的解釋爲什麼這工作正常(和一個與數據類型:「JSON」沒有):

$.ajax({ 
     url: u, type: "POST", 
     data: data, 
     success: function (d) { response($.map(d, function (o) { return { label: o.Text, value: o.Text, id: o.Id} })); } 
}); 
+0

能否請你展示完整的URL包括任何參數? – nnnnnn

+0

當你'u'相對於你當前的域名時,你可以試試嗎?例如:/ myapp/areax/... – RvdK

+0

是否是跨域請求?可能是相同的主機,但不同的端口?這是奇怪的傢伙... –

回答

2

從這裏的bug:http://bugs.jquery.com/ticket/8118

您可能正在使用jquery-validation插件。 jquery-validation插件與jQuery 1.5不兼容,衝突會導致你在這裏遇到的問題。

如果問題不明確,由於jQuery的驗證插件,檢查是否有任何其他的jQuery插件,可能不兼容與jQuery 1.5

+0

是的,這是我遇到的確切問題。正如我懷疑,這是在jQuery的錯誤:)謝謝! –

相關問題