2016-05-31 37 views
0

我使用不同的服務器上的API,我有一個CORS錯誤,我認爲。奇怪的是,它首先沒有問題的工作,然後我得到這個錯誤信息沒有'訪問控制允許來源'標題出現在與json和jquery請求的資源錯誤

XMLHttpRequest cannot load http://www.thecocktaildb.com/api/json/v1/1/random.php? tagmode=any&type=POST&format=jsonp. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'myadress.com' is therefore not allowed acces 

我加入crossDomain: "true"和它的工作了一天。現在它不再工作,我已經搜索並嘗試了很多我找到的解決方案。但沒有任何工作。什麼是問題,我如何解決它?試過jsonp而不是json有沒有​​和& callback =?什麼也沒做。我甚至爲chrome安裝了CORS啓用擴展。但同樣的錯誤,我無法控制API本身或託管它的服務器。我怎樣才能解決這個問題?以下是我的代碼。

 function random() { 
     $(document).ready(function() { 
      $.getJSON("http://www.thecocktaildb.com/api/json/v1/1/random.php", { 
       tagmode: "any", 
       type: "POST", 
       format: 'jsonp', 
       crossDomain: "true" 
      }, function (data) { 
       console.log(data); 

       var result = ""; 
       $.each(data.drinks, function (index, value) { 
        result += "<p>" + value.idDrink + "<p>"; 
        result += "<p>" + value.strDrink + "<p>"; 
       }); 
       $('#result').html(result); 
       console.log(result); 
      }); 
     }); 
    } 
+0

該網站沒有設置標題,所以沒有什麼可以從您的結尾做。 Severside代理是你需要的。 – epascarello

+0

服務器不返回jsonp但是json。然後,您應該使用您自己的服務器來提供請求 –

回答

0

如果我的理解是正確的,你正在做一個AJAX call比你的頁面不同的域上。因此,瀏覽器會阻止它,因爲出於安全原因,它通常允許同一來源的請求。當你想做一個跨域請求時,你需要做一些不同的事情。關於如何實現這個教程是使用CORS

普通網頁可以使用XMLHttpRequest對象發送和 從遠程服務器接收數據,但他們由同一個 同源策略的限制。擴展不限於此。一個分機可以與 遠程服務器通話,只要它首先請求 跨域權限。

解決方案:

對於可以只允許訪問特定的域:

response.addHeader("Access-Control-Allow-Origin", "http://www.thecocktaildb.com"); 

檢查這個blog post

0

我認爲你可以做一些繞過CORS錯誤的修改。但目標環境也可以阻止CORS請求。當我使用Paypal結帳時,我遇到了同樣的問題。貝寶環境不接受CORS請求。

這樣就可以嘗試通過服務器端進行此調用。

相關問題