2014-10-18 27 views
0

我對於連接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) 
     } 
    }); 

} 

我在這裏做錯了什麼?

+0

*「添加一個頭到響應」*,你不能在你的客戶端做到這一點在問題中的代碼片斷似乎嘗試前端Javascript的方式。所以你需要刪除整個'success:function(response)'塊。這對你沒有任何幫助。 – sideshowbarker 2017-08-18 17:59:44

+0

*「響應的HTTP狀態碼爲405」*表示您要求的服務器以「方法不允許」響應,這意味着它未配置爲允許向請求中的URL發送POST請求,否則它沒有配置爲允許OPTIONS請求。 – sideshowbarker 2017-08-18 18:03:00

+0

'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

回答

0

從另一個域調用web api時,必須設置SERVER以使用正確的標題進行響應。該技術被稱爲跨源資源共享。谷歌的「CORS」和任何你在服務器上得到的.Net/nodejs/PHP ...

+0

這是一個很好的例子,說明如何在最近使用的.net中實現服務器響應,web api。很棒。 [http://www.asp.net/web-api...](http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api ) – wojjas 2014-10-26 16:30:38

相關問題