2017-05-02 16 views
1

私のサーバ上でAJAX経由で送信されないpostdataに関する問題を特定しました。それをデバッグするには、私はシンプルなAJAX呼び出しをテストするためにはJavaScriptの次かなりミニマルな作品を書いた:AJAX postdataはlocalhostで動作しますが、(Apache)サーバでは動作しません

function my_custom_ajax(target_page, target_element , postdata_contents) { 

    // Sending the XMLHttpRequest as postdata 
    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", target_page, true); 
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); 
    xhr.setRequestHeader("Content-length", postdata_contents.length); 
    xhr.setRequestHeader("Connection", "close"); 
    xhr.send(postdata_contents); 

    // Waiting for the request to return 
    xhr.onreadystatechange = return_data; 

    // If all went well, we update the target element 
    function return_data() 
    { 
    if(xhr.readyState === 4) 
    { 
     if(xhr.status === 200) 
     { 
     // We update the target element 
     document.getElementById(target_element).innerHTML = xhr.responseText; 
     } 
     // Throw error in case of 404 or such 
     else 
     document.getElementById(target_element).innerHTML = "XHR can't be loaded"; 
    } 
    // Throw error in case request got interrupted or didn't work out 
    else 
     document.getElementById(target_element).innerHTML = "XHR error"; 
    } 
} 

これは、次のHTMLと呼ばれる:

<div onClick="my_custom_ajax('test_page.php?xhr','my_id','postdata_test');"> 
    Click me 
</div> 
<div id="my_id"> 
    xhr response will appear here 
</div> 

そしてだけ含まれているPHPページを呼び出しますこれは:

exit(var_dump($_POST)); 

私が所有して私のApacheのローカルホスト内のコードのこの作品、または別のApacheサーバを実行して、それがPOSTDATAとしてpostdata_contentsにあるものは何でも渡すん。出口(var_dump($ _ POST));それが正常に動作することを示し、私はそれに渡されたpostdataの値を印刷します。

しかし、この同じコードをApacheサーバで実行しても動作しない場合、PHPファイルに従ってpostdataは渡されないので、得られるのは«array(0){}»です。ここで

は、要求内容のFirefoxの開発ツールですビューは(申し訳ありませんが、フランス語ではなく、何が何であるかを明らかにする必要があります)です。

デバッグ・ツールは、POSTデータの内容が正しく送信されていることを示しています:しかし

、POSTデータが何らかの形で渡されていないことを返されたコンテンツショー:

私はlocalhostと私の他のApacheサーバ上で

、すべてが正確に同じPOSTDATAが適切に渡された非常に最後のステップまで(のvar_dumpメッセージがスタイル設定されているが、あなたは簡単にそれの要点を見ることができます:postdata_testは$ _POST)の一部です:

このApacheサーバの設定をいじると私は考えることができ、デバッグ方法とブレークポイントのすべてをしようとする時間後、私の神経があまりにまで働いています合理的にこれについて考え続けてください。別のサーバーを使用するオプションや、新しいサーバー上のローカルApache構成ファイルをコピーするオプションがないため、私はこの質問をあなたにすべて延期し、誰かがそれを理解できるか、事前に

おかげで、 エリックB.

答えて

1

は偶然それを自分自身を解決、私はmod_dumpioサーバ上で起動していたと私はそれをオフにしたら、それは仕事を始めました。

私はmod_dumpioがXHR POSTを拒否するために何をしていたのですが、一般的なHTTP POSTではなく、少なくとも解決しました。

これはいつか他の誰かを助けることを願っています。

(例では、私の例のpostdataクエリが不正であったことを認識しています。「postdata_test」ではなく「postdata_test =」であるべきですので、自分の状況に陥っていて、私がした同じテスト)

関連する問題