2016-12-01 132 views
1

我想使用Ajax調用發出POST請求,但是我收到狀態碼爲0的錯誤,其中所有請求參數都在Advanced REST Client中工作。Javascript Ajax調用不工作?

mycode的:

<button>Post</button> 

$('button').click(function(e) { 
e.preventDefault(); 

$.ajax({ 
     url: "https://api.sendgrid.com/v3/mail/send", 
     type: "POST", 
     contentType : 'application/json', 
     headers : { 
      'Authorization' : 'Bearer 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', 
      'Content-Type' : 'application/json' 
     }, 
     data: JSON.stringify({ 
       "personalizations": [{ 
       "to": [{ 
        "email": "[email protected]" 
       }] 
       }], 
       "from": { 
       "email": "[email protected]" 
       }, 
       "subject": "Great, World!", 
       "content": [{ 
       "type": "text/plain", 
       "value": "Cool OK!" 
       }] 
      }), 
     dataType: "json",   
     success: function (response) { 
      var resp = JSON.parse(response) 
      alert(resp.status); 
     }, 
     error: function (xhr, status) { 
      alert("error : "+status+" :: "+JSON.stringify(xhr)); 
     } 
    }); 
}); 

這是我上面的代碼,在運行它不斷拋出錯誤說

{"readyState":0,"responseText":"","status":0,"statusText":"error"}

還要檢查在jsfiddle

請幫我,建議我一些解決方案,我無法找到問題我代碼。

+0

這是投擲'405方法不允許'請檢查你正在發送的參數和服務層的相關方法 – brk

+0

是405但相同的請求參數在高級休息客戶端工作正常.. –

+1

我建議使用Fiddler來通過Advance Rest Client發送請求時的樣子,以及使用上述代碼發送請求時的樣子。我認爲這是關於CORS的。當您嘗試發佈到不同的域時,瀏覽器使用OPTIONS動詞發送優先請求,並且對於該請求,您將得到NOT ALLOWED響應(因爲服務器不支持此http動詞),這就是爲什麼POST不會工作。 – xxxmatko

回答

2

瀏覽器擴展並不僅限於瀏覽器本身的跨源請求。因此,像Advance Rest Client或Postman這樣的分機可以請求Cross Origin Resources。 從Chrome瀏覽器的文章:https://developer.chrome.com/extensions/xhr

因此,當您創建一個想訪問另一個域的資源的網站時,您必須啓用CORS,就像Matt所說的那樣。