2017-04-20 26 views
0

這是我的第一篇文章。ship.com後的API CORS JavaScript Ajax

我有用POST方法發送數據的問題。

控制檯顯示我: 「跨源請求被阻止:同源策略不允許在https://api.aftership.com/v4/trackings處讀取遠程資源(原因:缺少CORS頭'Access-Control-Allow-Origin')。」

我閱讀了CORS,但我仍然遇到同樣的問題。

這裏是我的代碼:

function track() { 
    var xhr = new XMLHttpRequest(); 
    xhr.open('POST', 'https://api.aftership.com/v4/trackings/', true); 
    xhr.setRequestHeader('Content-Type', 'application/json'); 
    xhr.setRequestHeader('aftership-api-key', 'key'); 

    xhr.onload = function() { 
     if(xhr.status === 200) { 
      console.log(' works? : ' + xhr.responseText); 
     } 
     else { 
      console.log('DOESN NOT WORK!' + xhr.status); 
     } 
    } 
    xhr.send("tracking_number=number"); 
    //xhr.send(); 
} 

有時使用GET方法我可以創建跟蹤號碼,但它不長的工作方式。但是在創建它時,我可以在Google Chrome上使用CORS插件的DELETE方法。無插件我無法使用DELETE方法。

我想爲自己寫一個使用API​​接口的手機應用程序。

請幫忙! :D

+0

我認爲這是使用中的Web瀏覽器模擬器phonegap-瀏覽器的限制約束了CORS。它不會是一個問題真正的移動設備。從我所知道的,在線建議的通常解決方案是配置你的服務器發送'Access-Control-Allow-Origin:*'。如果你不控制API服務器,顯然你不能這麼做,所以我不確定這個解決方案是什麼 –

+0

代碼後面的段落有點不清楚 - 如果你有一個讓你的代碼工作的插件(這個插件?https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en),那很好。當您在瀏覽器中測試時,CORS只是一個真正的問題,因此您可以使用該插件繞過它進行測試。 –

+0

是的,我使用這個插件,但POST方法仍然不起作用。 – ZenekPL

回答

0

您需要更改您的內容安全策略元標記。

這條線在你的HTML文件的頂部:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *"> 

可以改變這一點:

<meta http-equiv="Content-Security-Policy" content="default-src * data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *"> 

請注意,在默認情況下,SRC的變化。在*那裏它允許任何流量,所以你可以改變你的具體網址。

您可以完全刪除該元標記。然而,這是不安全的,應該只是爲了看看是否導致你的問題。

閱讀此內容安全策略的部分:

https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/

您也可以有一個白名單的問題,而是先試試這個。如果需要,我會解釋白名單,或者您可以閱讀上面的鏈接。

0

meta標籤和白名單的插件添加

到config.xml中補充說:

<access origin="*" /> 
<allow-intent href="http://*/" /> 
<allow-intent href="https://*/*" /> 

還是POST方法不起作用......

也許是它使用POST方法更簡單的方法通過PHP或node.js?

我需要解決這個問題,以完成我的應用程序:(

+0

你明白了嗎? – robBerto