我對於連接API和Ajax請求等領域有點新鮮。我正嘗試向服務器上的API發送POST ajax調用,但是當我從我的機器發送此錯誤時出現此錯誤:簡單的解決方案沒有'Access-Control-Allow-Origin'標題出現在請求的資源上?
沒有「Access-Control-Allow-Origin」標頭在請求的資源上。因此不允許訪問原產地'http://localhost'。響應的HTTP狀態碼爲405.
但是,如果腳本從託管服務器運行,那麼我不會收到此錯誤。當然,我在這裏的許多問題中都會讀到這個問題,但由於這麼多奇怪的術語我無法理解,所以我無法執行任何解決方案。根據我的理解,我嘗試了許多這些解決方案,但他們沒有奏效。
建議的解決方案之一是「爲響應添加標題」。所以我嘗試了這樣,但它沒有工作:
function ajax_insert(data, success_func, error_func) {
$.ajax({
type: "POST",
url: the_url,
data: data,
contentType: 'application/json; charset=UTF-8',
dataType: 'json',
xhrFields: {
withCredentials: true
},
success: function(response) {
response = HttpResponse(json.dumps('{"status" : "success"}'))
response.__setitem__("Content-type", "application/json")
response.__setitem__("Access-Control-Allow-Origin", "*")
success_func(response)
},
error: function(xhr){
error_func(xhr)
}
});
}
我在這裏做錯了什麼?
*「添加一個頭到響應」*,你不能在你的客戶端做到這一點在問題中的代碼片斷似乎嘗試前端Javascript的方式。所以你需要刪除整個'success:function(response)'塊。這對你沒有任何幫助。 – sideshowbarker 2017-08-18 17:59:44
*「響應的HTTP狀態碼爲405」*表示您要求的服務器以「方法不允許」響應,這意味着它未配置爲允許向請求中的URL發送POST請求,否則它沒有配置爲允許OPTIONS請求。 – sideshowbarker 2017-08-18 18:03:00
'contentType:application/json;你的代碼添加到請求中的charset = UTF-8'頭會觸發你的瀏覽器首先自動執行[CORS預檢選項請求](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS #Preflighted_requests)。因此,如果您提出請求的服務器未配置爲允許OPTIONS請求,則該預檢將失敗,並且您的瀏覽器將永遠不會發送您嘗試發送的實際POST請求。所以底線是,你需要檢查服務器以確保它配置了CORS支持。 – sideshowbarker 2017-08-18 18:05:04