私のサーバ上で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.