2012-07-01 29 views
2

我試圖從jquery的$.ajax$.getJSON或其他服務器上抓取一個文件,但我打到access-control-allow-origin牆上,並且jsonp選項不顯示' t似乎爲我工作。jQuery ajax和getJSON請求觸及訪問控制允許來源問題

該網站使用的是jQuery 1.5.1。

這裏是我的三個測試:

使用基本$阿賈克斯,在URL中請求從未?callback=?附加:

$.ajax({ 
    url: url, 
    datatype: 'jsonp', 
    error: function(){console.log('error');}, 
    success: function(){console.log('success');} 
}); 

使用基本$就與企圖入侵,仍然可以得到跨站點問題:

$.ajax({ 
    url: url + '.jsonp?callback=?', 
    datatype: 'jsonp', 
    error: function(){console.log('error');}, 
    success: function(){console.log('success');} 
}); 

使用$ .getJSON,擊敗了跨站點的問題,但錯誤的情況下永遠不會觸發:

$.getJSON(url + '?callback=?', 
    function(data){ 
     console.log('success'); 
    }) 
    .error(function(){ 
     console.log('error'); 
    }) 
    .success(function(){ 
     console.log('success!'); 
    }); 

任何人看到我在做什麼錯了?最後,我試圖測試以查看url是否存在,如果不存在,請執行錯誤操作。

編輯:我試圖訪問的網址不存在。我期待觸發錯誤情況。

回答

3

爲了能夠從javascript訪問外部資源。遠程資源必須在響應頭中包含access-control-allow-origin。如果您可以控制該資源,則需要將此響應標頭添加到*(或者您的域名,如果您想要更受限制的訪問控制)。

瞭解更多關於此這裏:http://enable-cors.org/

如果你不控制外部資源。解決方案更棘手。有些人利用YUI進行跨域Ajax調用。見這裏:http://jpvalappil.wordpress.com/2010/01/04/cross-domain-ajax-the-yui-way/

如果您正在編寫Chrome擴展,API允許您授予您的擴展權限,以便從js訪問其他域的資源。

+0

我在等待後端開發者上線,但是這個端點在文件存在的情況下工作(通常,儘管我目前遇到問題),所以我認爲這是適當的?我會檢查他什麼時候回來。 – hookedonwinter

+0

另外,第三種情況不是觸及訪問控制允許來源問題。任何想法爲什麼錯誤功能沒有被觸發? – hookedonwinter

0

你必須指定一個超時

$.ajax({ 
    dataType: "jsonp", 
    url : url, 
    timeout : 1000 
}) 
    .done(function(data) {logdata(data); }) 
    .fail(function() { logdata("error"); }); 
+0

試過,只是爲了檢查,但問題不是超時,它是'access-control-allow-origin' – hookedonwinter

1

您可以使用jQuery-JSONP。這個腳本允許你捕捉錯誤(儘管沒有任何有意義的錯誤信息)。

$.jsonp({ 
     "url": "http://gdata.youtube.com/feeds/api/users/"+userId+"?callback=?", 
     "data": { 
      "alt": "json-in-script" 
     }, 
     "success": function(userProfile) { 
      // handle user profile here 
     }, 
     "error": function(d,msg) { 
      alert("Could not find user "+userId); 
     } 
    }); 

是由主流瀏覽器的支持:

  • 的Internet Explorer 6+
  • 火狐2+
  • 鉻1+
  • 的Safari 3+
  • 歌劇9+
0

你使用了數據類型,但你應該使用dataType。

+0

不真實。 'datatype'和'dataType'在AJAX中給出了完全相同的結果。 –

+0

改變它到dataType爲我修復它 – collm109

相關問題