2012-01-26 3 views
0

XMLHttpRequestオブジェクトをRailsサーバーに送信しようとしていますが、ヘッダーが原因で機能が停止しています。ここに私の観察です:XMLHttpRequestポストメソッド - ヘッダーが停止しています

  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); 
    } 
    

私の3つの質問があります:

  1. 私はPOSTメソッドを介してデータを送信するために、上記のコードに変更するには何が必要ですか?

  2. 私は印象に残っていますが、POSTメソッドはいくつかのヘッダーを送信する必要がありますが、「xhr.setRequestHeader( 'Content-type'、 'application/x-www-form-urlencoded '); "参考文献によく言及されているようです。誰かが私にa)ヘッダーを送信する必要がある理由とb)送信する必要がある理由を理解する手助けができますか?

  3. 私はレールサーバーを使用しており、ローカルで開発中です。最終的には、モバイルデバイスのクライアント側でこのコードが実行され、データを受け渡すためにホストされたレールサーバーに移動します。レールサーバーでPOSTメソッドを使用する際の制限はありますか?サーバーからクライアントに情報を送信する際にJSONを使用する予定です。

ありがとう!

UPDATE:ヘッダが開いXHR要求の後、それを送信する前に来る必要があります:この記事は他の誰か4時間を節約できます

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); 

希望。

答えて

1

JavaScriptコードのウェブページは、localhost:3000でも公開されていますか?そうでない場合、これはクロスドメイン要求とみなされ、サーバーは特別なヘッダーを返す必要があります。したがって、2つのオプションがあります:

1)ウェブページをサーバーと同じドメインにホストします。これにより、同じドメイン要求が行われます。

2)サーバーに適切なCORSヘッダーを返送してください。 CORSの詳細については、http://www.html5rocks.com/en/tutorials/cors/

+0

私は間違いを発見しました。xhrリクエストを開いた後で、送信する前にヘッダーを設定する必要があります。投稿を参照するには、http://stackoverflow.com/questions/6207339/xmlhttprequest-setrequestheader-error – Vee

関連する問題