[英]Cross Origin ajax “POST” request failing
我有一個運行在localhost:8080上的webservice(REST),要調用此jquery代碼使用的webservice:
jQuery.ajax({
type: "POST",
url: "http://localhost:8080/user/register",
data: '{"name": "' + name + '","email": "' + email + '","password": "' + password + '"}',
beforeSend: function(x) {
if(x && x.overrideMimeType) {
x.overrideMimeType(jsonMimeType);
}
},
dataType:"jsonp",
Accept : "application/json",
contentType: "application/json",
success: registerUser_success_callback,
error: registerUser_error_callback
});
當我嘗試從同一個域(即localhost:8080)調用此javascript時,它就像一個超級字符一樣起作用! 這是相同的屏幕截圖:
但是,當我嘗試從其他域(即localhost:80)訪問相同文件時,它失敗了,令人驚訝的是,它發出了GET消息,而不是POST消息,而且我還在服務器的日志文件中得到了一條日志,說GET REST資源不支持該方法。 這是相同的屏幕:
從我在Internet上閱讀的內容(尤其是在這里 ,很棒的文章!),跨域請求應該首先發出一個OPTIONS請求(將其緩存以備后用。)我的情況出了什么問題?
我嘗試使用FireFox的插件RESTClient調用具有相同參數的rest服務,我能夠成功調用rest service(POST方法),所以這主要是ajax部分的問題。
幫我解決這個問題! lemme是否知道我是否需要分享更多詳細信息。
PS:@A之后。 Wolff建議,我將數據類型從jsonp更改為json,現在我的瀏覽器發出了OPTIONS,但此后它不再發送實際的POST請求!
好吧,再挖一些,我找到了解決方案!
在更改A. Wolff建議之后,瀏覽器正在發送OPTIONS請求並收到200響應,但是在該實際POST請求未發送到服務器之后。
問題是,如果在我的情況下,如果發送任何特定的標頭“ Content-Type”,則服務器必須在響應(OPTIONS請求的響應)的“ Access-Control-Allow-Headers”字段中添加該標頭。 我更改了服務器端代碼,以在響應標頭中填充該字段,然后VOILA!
希望這對其他人也有幫助!
編碼愉快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.