2017-12-04 15 views
-1

JavaScriptからPHPへの簡単な投稿をしようとしていますが、転送するデータを取得できません。私はUbuntuでApache2を使用しています。私がMozillaでPHPコードを実行すると、それは私が尋ねたことをしますが、javascript phpから呼び出されたときに、サーバー側でPHPに情報が得られないようです。私はポスト関数だけに焦点を当てるようにコードを単純化しようとしました。ここでは、HTMLコードは次のとおりです。javascript投稿要求がサーバーに表示されない

<!doctype html> 
<html> 
<head> 
<title>Post Test </title> 
</head> 
<body> 

<p id="demo"></p> 

<script> 
    var http = new XMLHttpRequest(); 
    var url = "post_test.php"; 
    var file_data = "text string"; 
    http.open("POST", url, true); 
    http.onreadystatechange = function() { 
     if(http.readyState == 4 && http.status == 200){ 
      document.getElementById('demo').innerHTML=this.responseText 
     }; 
    } 
http.send(file_data); 
</script> 
</body> 
</html> 

ここではPHPです:

<?php 
var_dump(isset($_POST['file_data'])); 
?> 

私は、画面上のブール値(false)のメッセージが表示されます。 ファイルのアクセスを確認しました。両方のファイルはすべてrwxに設定されています。 私はhtml、javascript、およびphpを学ぼうとしています。私はもっ​​と多くすることができるまで、jQueryを延期したいと思います。

+1

あなたは何が起こっているのか確認するために、ブラウザの開発者向けツール、特にネットワークおよびコンソールのタブを見たことがありますか? – j08691

+0

開発者コンソールを有効にしました。エラーは表示されません。私はまた、エラーをApacheのエラーログに表示されません。 – Tosk

答えて

1

データの中で、どのフィールド名を使用するかを指定してください。あなたの場合、それはfile_dataです。

var myData = "file_data=foo"; 
http.send(myData); 

次に、あなたのphp

<?php 
    var_dump(isset($_POST['file_data'])); 
?> 
1

あなたはPHPにプレーンテキストの文字列を送信しています。サーバーに送る文字列の中に "file_data"という言葉を書いていないので、そのキーの名前にPHPがどのように当たると思いますか$_POST? PHPはサーバー上で動作しますが、JS変数名は表示されません。

PHPは、$_POSTのデータにapplication/x-www-form-urlencodedmultipart/form-dataのデータ形式に従ってデータをフォーマットします。

あなたがそうのようなapplication/x-www-form-urlencodedを構築することができます。

http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
var data = "file_data=" + encodeURIComponent(file_data); 
http.send(data); 
+0

ありがとうございました。私はヘッダーの重要性を理解していませんでした。それは今働いている。 – Tosk

関連する問題