2012-03-21 222 views
1

在沒有傳遞任何數據參數時,我在jQuery中遇到了PUT和POST ajax CORS請求的奇怪問題。沒有數據參數的jQuery PUT/POST ajax CORS請求

所以我通過設置標題在我的服務器上啓用了CORS。一切工作正常,當我爲例子做:

$.ajax({ 
    url: "http://127.0.0.1/R/index.html", 
    type: "PUT", 
    data: {foo:"bar"} 
}); 

然而,當我做同樣的請求,而不設置data參數,火狐返回而沒有張貼了ajax:

$.ajax({ 
    url: "http://127.0.0.1/R/index.html", 
    type: "PUT" 
}); 

請注意,這只是發生對於POST和PUT方法,當在請求中指定了完整的url時,並且沒有指定http數據參數。當url與頁面位於同一個域時也會發生(因此不需要CORS)。如果我只是在url中指定路徑,而不是完整的url,則不會發生這種情況。

任何線索我怎麼能做一個POST/PUT而不傳遞任何參數(我的服務器不會接受'假'參數)。

+0

哪些CORS標頭是你設置:

它可以通過使用像這樣可以避免?設置數據:null發送請求嗎?你可以使用Wireshark來獲取實際的請求/響應頭文件嗎? – monsur 2012-03-21 18:06:34

+0

根本沒有請求被髮送。它立即返回。我懷疑這可能是創建multipart/form-data字符串的函數中的一個錯誤。 – Jeroen 2012-03-21 18:37:16

回答

5

我很確定,現在它是jQuery中的一個錯誤,當它在沒有數據發佈時調用跨域ajax請求中的'multipart/form-data'編碼器時。

if(jQuery.isEmptyObject(mydata)){ 
    $.ajax({ 
     url: "http://127.0.0.1/R/index.html", 
     type: "PUT", 
     contentType: 'application/x-www-form-urlencoded' 
    }); 
} else { 
    $.ajax({ 
     url: "http://127.0.0.1/R/index.html", 
     type: "PUT", 
     data: mydata 
    }); 
} 
+0

謝謝。我得到'405'錯誤(方法不允許),但只有一些瀏覽器,直到我看到這一點。爲我修好了。 – quilkin 2016-06-06 17:19:47