簡體   English   中英

跨源ajax“ POST”請求失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM