2012-04-21 122 views
1

爲什麼下面的jQuery阿賈克斯總是調用,即使菲德勒是報告沒有任何錯誤的錯誤回調:jQuery的Ajax調用成功,但錯誤回調被調用

$.ajax({ 
     type: 'GET', 
     url: "http://open.mapquestapi.com/nominatim/v1/search?format=json&viewbox=-122%2C46%2C-73%2C40&countrycodes=ca&bounded=1&addressdetails=0&q=[hotel]", 
     dataType: 'jsonp', 
     jsonp: 'json_callback', 
     error: function(parameters) { 
      alert(parameters); 
     }, 
     success: searchCompleteCallBack 
    }); 

這是Fiddler會話,這雖然成功,有一個紅圈,並帶有跨越的狀態圖標的線路如下圖所示: enter image description here

GET /nominatim/v1/search?format=json&viewbox=-122%2C46%2C-73%2C40&countrycodes=ca&bounded=1&addressdetails=0&q=[hotel]&json_callback=jQuery17108850838504386628_1334974646679&_=1334974661295 HTTP/1.1 
Accept: application/javascript, */*;q=0.8 
Referer: http://localhost:50383/?AspxAutoDetectCookieSupport=1 
Accept-Language: en-US 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BOIE9;ENGB) 
Accept-Encoding: gzip, deflate 
Host: open.mapquestapi.com 
Connection: Keep-Alive 


HTTP/1.1 200 OK 
Date: Sat, 21 Apr 2012 02:17:41 GMT 
Server: Apache 
Content-Location: search.php 
Vary: negotiate 
TCN: choice 
Access-Control-Allow-Origin: * 
Content-Length: 4775 
Keep-Alive: timeout=5, max=91 
Connection: Keep-Alive 
Content-Type: application/json; charset=UTF-8 

jQuery17108850838504386628_1334974646679([{"place_id":"2166467243","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"node","osm_id":"1417990074","boundingbox":["43.0738813782","43.0938851929","-79.0912683105","-79.0712606812"],"lat":"43.0838817","lon":"-79.0812662","display_name":"Quality Hotel, Murray Street, Niagara Falls, Ontario, Ontario, Canada","class":"tourism","type":"hotel","icon":"http://open.mapquestapi.com/nominatim/v1/images/mapicons/accommodation_hotel2.p.20.png"},{"place_id":"2085733959","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"97928121","boundingbox":["49.8510055541992","49.8513870239258","-97.1532821655273","-97.1526718139648"],"lat":"49.8512060913871","lon":"-97.1530114466667","display_name":"Pembina Hotel, 1011, Pembina Highway, Point Road, Winnipeg, Manitoba, Canada","class":"amenity","type":"hotel"},{"place_id":"2152638544","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"node","osm_id":"1324405899","boundingbox":["43.8393080139","43.8593118286","-79.3921792603","-79.3721716309"],"lat":"43.849309","lon":"-79.382178","display_name":"Holiday Inn Express & Suites, Fulton Way, Thornlea, Markham, Ontario","class":"tourism","type":"hotel","icon":"http://open.mapquestapi.com/nominatim/v1/images/mapicons/accommodation_hotel2.p.20.png"},{"place_id":"2177668535","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"138157978","boundingbox":["43.4092330932617","43.4098968505859","-80.3297119140625","-80.3289260864258"],"lat":"43.40953956119","lon":"-80.3293440133707","display_name":"Hespeler Road, Cambridge, Ontario, Canada","class":"tourism","type":"hotel","icon":"http://open.mapquestapi.com/nominatim/v1/images/mapicons/accommodation_hotel2.p.20.png"},{"place_id":"2138545308","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"node","osm_id":"1280026038","boundingbox":["43.6322805786","43.6522843933","-79.4218270874","-79.401819458"],"lat":"43.6422834","lon":"-79.4118234","display_name":"Palace Arms, Strachan Avenue, Liberty Village, Toronto, Ontario, M5A1Z9, Canada","class":"tourism","type":"hostel"},{"place_id":"5773486","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"node","osm_id":"583902387","boundingbox":["45.3422987366","45.3623025513","-75.6427056885","-75.6226980591"],"lat":"45.3522996","lon":"-75.6327046","display_name":"Bank Street, Blossom Park, Ottawa, Ontario","class":"tourism","type":"hotel","icon":"http://open.mapquestapi.com/nominatim/v1/images/mapicons/accommodation_hotel2.p.20.png"},{"place_id":"2170250899","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"node","osm_id":"1445914835","boundingbox":["43.1746237183","43.194627533","-79.5842340088","-79.5642263794"],"lat":"43.1846249","lon":"-79.5742298","display_name":"Beamer Falls Manor at Falconridge Farm, Ridge Road West, Grimsby, Ontario, Canada","class":"tourism","type":"hotel","icon":"http://open.mapquestapi.com/nominatim/v1/images/mapicons/accommodation_hotel2.p.20.png"},{"place_id":"2664364","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"node","osm_id":"343055090","boundingbox":["43.6355078125","43.6555116272","-79.4053170776","-79.3853094482"],"lat":"43.6455088","lon":"-79.3953127","display_name":"Global Village Backpackers Hostel, King Street West, Fashion District, Toronto, Ontario, M5A1Z9, Canada","class":"tourism","type":"hostel"},{"place_id":"2168185190","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"129431482","boundingbox":["45.3853416442871","45.3861045837402","-75.733268737793","-75.7327346801758"],"lat":"45.3857092561038","lon":"-75.7330025913023","display_name":"Best Western Macies Hotel, Carling Avenue, Rideauview, Ottawa, Ontario, Canada","class":"tourism","type":"hotel","icon":"http://open.mapquestapi.com/nominatim/v1/images/mapicons/accommodation_hotel2.p.20.png"},{"place_id":"2166467244","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"node","osm_id":"1417990095","boundingbox":["43.0724356079","43.0924394226","-79.0928704834","-79.072862854"],"lat":"43.0824382","lon":"-79.0828672","display_name":"Hilton Niagara Falls, Fallsview Boulevard, Niagara Falls, Ontario, Ontario, Canada","class":"tourism","type":"hotel","icon":"http://open.mapquestapi.com/nominatim/v1/images/mapicons/accommodation_hotel2.p.20.png"}]) 

其實我有這方面的工作不是很久以前,但無法弄清楚什麼我現在所做的是錯誤的。

回答

0

我無法在Firefox和Chrome中重現該問題。

在您的控制檯中試一下這段代碼,看看發生了什麼。

$.ajax({ 
     type: 'GET', 
     url: "http://open.mapquestapi.com/nominatim/v1/search?format=json&viewbox=-122%2C46%2C-73%2C40&countrycodes=ca&bounded=1&addressdetails=0&q=[hotel]", 
     dataType: 'jsonp', 
     jsonp: 'json_callback', 
     error: function(parameters) { 
      console.error("error"); 
      console.error(parameters); 
     }, 
     success: function(parameters) { 
      console.log("success"); 
      console.log(parameters); 
     }, 
    }); 

而且我得到這樣的:

XMLHttpRequest 
success 
[ 
Object 
, 
Object 
, 
Object 
, 
Object 
, 
Object 
, 
Object 
, 
Object 
, 
Object 
, 
Object 
, 
Object 
] 
+0

這是什麼控制檯? Chrome控制檯沒有提供任何內容。謝謝。 – 2012-04-21 03:31:29

+0

您使用的是Chrome嗎?然後按Ctrl + Shift + J,你會看到一個Javascript控制檯。 – clowwindy 2012-04-21 03:33:39

+0

是的,使用Chrome。這是否執行了腳本,但控制檯只顯示如下這樣的警告buhcn:資源解釋爲Image,但是使用MIME類型application/octet-stream傳輸:「http:// localhost:50383/Content/themes/base/images/ui- icons_454545_256x240.png」。也許我正在查看此Cisco AnyConnect安全移動客戶端上的安全設置?看起來事情在Cisco安裝後停止工作。 – 2012-04-21 03:37:54

0

在jQuery的1.7.2.js,存在當動態JSONP請求腳本被加載(行8123點左右)從灰色區域當從服務器收到響應,並調用安裝在8016行的回調。即使在窗口對象的全局範圍中定義了該回調,但在某些情況下,該回調看起來不存在。這個窗口對象下的子元素的佈局確實與它有關,因爲通過點擊直接放置在ASP.NET剃鬚刀局部視圖上的複選框來調用ajax是有效的,但是當您從遇到的OpenLayers.Popup.FrameCloud中的按鈕調用時這個問題。

一種解決方法是以免jQuery定義一個隨機函數作爲JSONP回調如下:

$.ajax({ 
     type: 'GET', 
     url: "http://open.mapquestapi.com/nominatim/v1/search?format=json&viewbox=-122%2C46%2C-73%2C40&countrycodes=ca&bounded=1&addressdetails=0&q=[hotel]&json_callback=onSearchComplete", 
     dataType: 'jsonp', 
     jsonp: false, 
     error: function(parameters) { 
      alert(parameters); 
     } 
    }); 

其中在這種情況下,「onSearchComplete」是在腳本中定義的全局函數。通過這種設置,無論ajax查詢如何被調用,onSearchComplete將始終在成功的服務器響應時被調用。在這種情況下,問題是jQuery仍然創建並安裝了隨機命名的回調函數,即使它並未作爲json請求的一部分發送。因此,隨機生成的回調將永遠不會執行,並導致jQuery將其視爲錯誤條件。

也許jQuery大師可以在這裏揭示更多的光芒。

相關問題