2014-09-03 70 views
4

我對jquery ajax使用相同的域orgin策略感到困惑。如果我使用jQuery獲取請求的url,我可以得到結果。我錯過了什麼?我認爲它只限於同樣的政策。我以爲阿賈克斯是相同的政策?

$(function() { 
     var data;      

     var x = $.ajax({ 

      dataType: 'json', 
      url: 'http://jsonplaceholder.typicode.com/posts', 
      data: data, 
      success: function(){ console.log("true");}, 
      failure: function(){console.log("failed");} 
     }); 


     console.log(x); 

    }); 
+1

聽起來像JSONP。 – Nit 2014-09-03 20:58:04

+3

給定的域允許[跨源資源共享(CORS)](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) – 2014-09-03 20:58:41

+1

是的。雖然,您可以將您的網站配置爲[允許跨源資源共享](http://en.wikipedia.org/wiki/Same-origin_policy#Relaxing_the_same-origin_policy)。 – mathielo 2014-09-03 20:59:02

回答

3

請參閱this page

可以通過CORS或JSONP從您的開發環境訪問API。

是的,它是,但您所請求的網站特別允許CORS (cross-origin resource sharing)以及JSONP請求,這意味着你可以使用這些方法中的任何一個請求從其他產地的數據。使用.ajax()方法與dataType: 'json'表示您正在使用CORS。您也可以通過dataType: 'jsonp'發出JSONP請求。

CORS和JSONP都是特定的服務器選項,可以啓用該選項以允許用戶從其他來源請求數據。請記住,服務器上的數據可能會被修改爲惡意,所以如果您開始使用該數據,則可能會存在潛在的安全漏洞。一定要只使用CORS或JSONP和你信任的服務。

+1

這可能會很挑剔,而改變措辭可能會讓它更難理解,所以它只是一個提示:CORS/JSONP不啓用數據的_requesting_,但允許客戶端訪問所請求的數據。您總是可以將外部資源(如js,images,css,...)加載到您的頁面中,否則JSONP和CDN將無法工作。但是,默認情況下,客戶端將不被允許讀取這些文件的內容。 – 2014-09-03 21:25:49

+0

感謝您的澄清@ t.niese。 – Adam 2014-09-03 21:38:11

+0

是不是瀏覽器允許或禁止'CORS'?如果是由網站決定的,那麼垃圾郵件黑客網站是不是「允許CORS」並竊取你的信息? – CodyBugstein 2014-12-08 16:45:53