2012-02-06 83 views
107

我需要使用foursquare API來搜索場地。當然它是跨域的。'無傳輸'錯誤與IE瀏覽器中的jQuery ajax調用

它在Firefox中沒有任何問題,但在Internet Explorer中(我測試過的7,8,9)。

我的JavaScript代碼如下所示:

searchVenues: function(searchQuery) { 
    $.ajax({ 
     url: 'https://api.foursquare.com/v2/venues/search', 
     data: { 
      sw: bound_south_west, 
      ne: bound_north_east, 
      query: searchQuery.query, 
      oauth_token: FSQ_OAUTH_TOKEN, 
      limit: 25, 
      intent: 'browse', 
      v: 20120206 
     }, 
     cache: false, 
     dataType: 'json', 
     success: function(data) { 
      displayResults(data, searchQuery.query); 
     }, 
     error: function(xhr, status, errorThrown) { 
      console.log(errorThrown+'\n'+status+'\n'+xhr.statusText); 
     } 
    }); 
} 

在Firefox中,它完美地顯示接收到的數據。 在Internet Explorer中,它記錄在控制檯上:

No Transport 
Error 
Error 

我該怎麼辦?

+6

檢查出答案爲[本SO後(http://stackoverflow.com/questions/5241088/jquery-call-to-webservice-returns-no-transport-error) – mkozicki 2012-02-07 22:05:00

回答

255

我測試了在Windows Mobile 7

後的時間花在地段明白,我終於發現了這一點:

http://bugs.jquery.com/ticket/10660

解決方法很簡單,只需設置此:

$.support.cors = true; 

和Ajax跨域請求將工作!

+1

工作就像一個魅力。非常感激。 – AndrewHenderson 2013-01-16 17:45:32

+0

完美!謝謝 ! – 2013-02-22 11:18:02

+7

這是魔術! – ygaradon 2013-04-05 00:00:00

12
jQuery.support.cors = true; 

$.ajax({ 
    crossDomain: true, 
    url: "", 
    type: "POST", 
    dataType: "xml", 
    data: soapMessage, 
}); 

你需要做跨域值爲true

+8

你的答案和接受的答案之間有什麼區別,在你的答案之前張貼了一段時間? – javanna 2013-03-02 18:55:29

+2

@javanna在選項參數中加入'crossDomain:true'。 – 2014-04-04 16:24:02

+8

什麼是跨域,爲什麼它需要是真的? – 2014-07-17 22:57:56

7

這個問題一直纏着我有一段時間了。作爲解決方法,我使用位於同一站點上的代理腳本。這些腳本只是執行服務器到服務器的非ajax HTTP請求(想到curl和WinHttp.WinHttpRequest)並將狀態和數據傳回給調用者。它可以工作,但顯然效率不高,因爲它必須執行兩個HTTP請求。

在我的情況下,解決方案是上述所有內容和「Access-Control-Allow-Origin」標題的組合。

$.support.cors = true; // this must precede $.ajax({}) configuration 

$.ajax({ 
    crossDomain: true, // added in jQuery 1.5 
    headers: { 
    'Access-Control-Allow-Origin': '*' 
    }, 
    ... 
}); 

回答這些調用的Web服務也以'Access-Control-Allow-Origin:*'標題響應。

+1

這個問題已被接受的解決方案超過2年... – 2014-11-21 14:59:55

+4

...和但這是提及CORS頭的第一個答案。接受的解決方案並不適合我。 – seanhodges 2015-01-22 09:06:56

+2

我想這應該是在服務的web.config。 – Fjodr 2015-04-30 14:50:41

5

嘗試這種解決方案:

https://stackoverflow.com/a/14463975/237091

或者,乾脆把你的HTML的代碼,包括jQuery的後面。

<!--[if lte IE 9]> 
<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js'></script> 
<![endif]--> 
+0

我發現Android上的Chrome(以及可能的Android瀏覽器)中出現了相同的問題,因此可能會放棄條件註釋以允許所有瀏覽器使用此腳本。 (項目主頁在這裏:https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest) – 2015-05-22 01:09:13

+1

這對我有效。除了確保Response Content-type是'text/plain' – 2015-09-03 14:59:49

+0

我在jquery中將它添加到Grunt中,現在它可以工作(https://www.npmjs.com/package/jquery-ajax-transport-xdomainrequest) 。 – tobias47n9e 2016-04-06 11:20:44

相關問題