我目前正在開發Web服務的Web前端。我使用jQuery 1.5.1作爲JS-Framework和Firebug進行調試。無法從web服務獲得有效響應
首先,我測試了Firefox擴展「REST Client」的Web服務。 有下列的請求是成功的:
{"requestUrl":"http://localhost:8080/Foobar/rest/goods?label=Schro","requestMethod":"GET","requestBody":"","headers":["accept","application/json"]}
現在,我想重現一個jQuery UI自動完成的背景下,這個請求()方法:
$("#autocompleteTest").autocomplete({
source: function(request, response) {
$.ajax({
url: "http://localhost:8080/Foobar/rest/goods/",
dataType: "json",
data: {
label: $("#autocompleteTest").val()
},
headers: {'accept':'application/json'},
error: function(jqXHR, textStatus, errorThrown) {
log(textStatus + "," + errorThrown);
log(jqXHR);
},
success: function(data) {
console.log("bla:" + data);
response($.map(data, function(item) {
return {
label: item.label + " # " + item.id,
value: item.id
}
}));
}
});
},
// [...]
我把這個配方從jQuery UI自動完成demo
然而,這觸發錯誤事件。螢火蟲說:
GET http://localhost:8080/Foobar/rest/goods/?label=Schrott - 200 OK 16ms
Antwort-Header
Server Foobar-Optimizer
Content-Type application/json;charset=UTF-8
Transfer-Encoding chunked
Date Wed, 09 Mar 2011 10:50:03 GMT
Anfrage-Header
Host localhost:8080
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b12) Gecko/20100101 Firefox/4.0b12
Accept application/json
Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Origin null
錯誤jqXHR說:
[Object { readyState=0, status=0, statusText="error"}]
和響應報頭是空的。
除了不同的結果,這兩個請求在我眼中看起來完全相同。 我將不勝感激任何建議。謝謝。
更新:解決方案
這是一個跨域策略問題。我不知道這種行爲。解決方案是將$ .ajax數據類型從「json」更改爲「jsonp」。這是覆蓋這些策略並訪問遠程Web服務的優雅方法。
當然,Web服務必須能夠處理這種JSON「填充」。
的其他可能性一堆就是這裏所說的:http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide
你有沒有嘗試刪除從「貨物」尾部的反斜槓? – 2011-03-09 11:49:28
是的,結果是一樣的:「錯誤」,並沒有進一步的信息給出。從Web服務本身的控制檯日誌看起來很順利:我不知道確切的實現,但它看起來好像它已發送請求的對象 – Weizen 2011-03-09 12:02:34