簡體   English   中英

XMLHttpRequest Post方法-標頭正在停止功能

[英]XMLHttpRequest Post Method - Headers are stopping function

我正在嘗試將XMLHttpRequest對象發送到我的Rails服務器,但是標題導致我的功能停止。 這是我的觀察結果:

  1. 當我注釋掉設置標頭的3行代碼時,xhr.readyState最終將等於4(關閉匿名函數中的警報框)。

  2. 如果3條標題行中的任何一條未注釋,則xhr對象將永遠不會更改狀態(不會觸發任何警報框)。

     function saveUserProfile(){ var user_email = $('#userEmail_box').val(); var xhr = new XMLHttpRequest(); xhr.onreadystatechange=function(){ if (xhr.readyState==4 && xhr.status==200) { alert("Yes: " + xhr.readyState); } alert("No: " + xhr.readyState); } var method = 'POST'; var params = 'userEmail=user_email'; var url = 'http://localhost:3000/xhr_requests.json'; var async = true; //Need to send proper header information with POST request xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhr.setRequestHeader('Content-length', params.length); xhr.setRequestHeader('Connection', 'close'); xhr.open(method, url, async); xhr.send(params); } 

我的三個問題是:

  1. 為了通過POST方法發送數據,我需要在上面的代碼中進行哪些更改?

  2. 我的印象是POST方法需要發送一些標頭,但不清楚“ xhr.setRequestHeader('Content-type','application / x-www-form-urlencoded');”中的哪個標頭。 似乎是參考文獻中經常提到的一種。 有人可以幫助我理解a)為什么需要發送標頭,以及b)需要發送哪些標頭嗎?

  3. 我正在使用Rails服務器,並且正在本地開發。 最終,此代碼將在移動設備的客戶端上執行,該設備將轉到托管的Rails服務器以傳遞和接收數據。 在rails服務器上使用POST方法是否有限制? 請記住,我打算在從服務器向客戶端發送信息時使用JSON。

謝謝!

更新:標頭應該在打開xhr請求之后出現,但在發送之前:

    xhr.open(method, url, async);        

    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xhr.setRequestHeader('Content-length', params.length);
    xhr.setRequestHeader('Connection', 'close');

    xhr.send(params);

希望這篇文章可以為其他人節省4個小時。

您的帶有JavaScript代碼的網頁是否也位於localhost:3000上? 如果不是,則將其視為跨域請求,並且您的服務器將需要返回特殊的標頭。 因此,您有兩種選擇:

1)將網頁托管在與服務器相同的域中,這將使該請求成為同一域的請求。

2)讓您的服務器返回適當的CORS標頭。 您可以在此處了解有關CORS的更多信息: http ://www.html5rocks.com/en/tutorials/cors/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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