3

クエリの結果を含む HTML テーブルを含むページがあります。各行の横にボタンがあり、クリックするとライトボックスが表示され、ユーザーがコメントを入力できる小さな HTML フォームが表示されます。

ユーザーがこのフォームの送信ボタンをクリックすると、行に含まれるデータ (可能であれば各セルの値を配列として) とコメントをスクリプトに送信し、データベースに挿入します。 .

完了すると、そのことを示す小さなメッセージが表示され、ライトボックスが消えると、ユーザーはテーブルに戻ることができます。

私の問題は、データを処理する PHP スクリプトにデータを送信することです。AJAX JavaScript は問題なく動作しますが、データの送信方法がわかりません。

コードは次のとおりです。

function getOutput() {
  //Get number of selected table row
  var i = document.getElementById('rowclicked').value;
  //Get the table
  var table = document.getElementById('table');
  //Get the comment
  var comm = document.getElementById('comment').value;
  var ajax = getRequest();
  ajax.onreadystatechange = function(){
      if(ajax.readyState == 4){
          alert(ajax.responseText);
      }
  }
  ajax.open("POST", "functions_comm.php", true);
  ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  //Only try to send the table row for now
  ajax.send(table.rows[i]);
}

「functions_comm.php」に「php echo "test";」を入れると、「alert(ajax.responseText);」「テスト」と表示され、その部分は機能しています。ただし、「print_r($_POST)」を実行しようとすると、空の配列が返されます。これは、「ajax.send(table.rows[i]);」によってデータが渡されなかったことを意味すると思います。

テーブルの行 i から php スクリプトにデータを渡すにはどうすればよいですか?

ありがとう。

4

2 に答える 2

3
  1. DOMElement のインスタンスを送信することはできません。文字列のみを送信できるため、その要素のテキストを送信する場合は、その innerHtml プロパティを使用します。
  2. メッセージ本文は URL エンコードする必要があります (application/x-www-form-urlencoded として送信する場合)。

ajax.send("tableData=" + encodeURI(table.rows[i].innerHtml));

于 2013-07-25T14:57:06.223 に答える
0

試す

ajax.send("tableData=" + table.rows[i]);

それ以外の

ajax.send(table.rows[i]);

編集

user1031794 が正しいと思います。エンコードが必要です

ajax.send("tableData=" + encodeURI(table.rows[i].innerHtml));
于 2013-07-25T14:47:21.720 に答える