1

ユーザーにシームレスなエクスペリエンスを提供するために、AJAX、HTML、および PHP をすべて一緒に使用しようとしています。現在、変数を PHP フォームに渡すのに問題があります。私のやり方は少し複雑ですが、これが AJAX を使った最初の実験なので、もっと簡単な方法があるかどうかはわかりません。

詳細に説明するには:

<div class="block" id="articles"></div>

詳細をロードして記事をロードするこの部門があります。この部門内で、ユーザーが記事に関連するコメントを追加できるようにしています。

function viewDets(str) {
  if(str == "") {
    document.getElementById("articles").innerHTML = "";
    return;
  }
  if(window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
  } else { // code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange = function () {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      document.getElementById("articles").innerHTML = xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET", "viewDets.php?q=" + str, true);
  xmlhttp.send();
}

これを使用すると、変数が viewDets に渡され、別のコンテナーが追加されます。

while($row = mysql_fetch_array($result)) {
    $count++;
    $taskComments = $row['Annotation'];
    $userName = $row['Username'];
    $timeStamp = $row['Time'];
    echo "Comments";
    echo "<p class=\"meta\">$count. $taskComments ($userName) -- $timeStamp</p>";
}
echo "</div></div></div></div></div></div>

<form name=\"inputCom\" method=\"get\">
    <div class=\"four column\">
        <div class=\"column_content\" id=\"commentInsert\">
            <label>Enter Comment</label>
            <input type=\"text\" id=\"comment\"value=\"\"></input>
            <input type=\"hidden\" id=\"Uname\" value=\"$user\"></input>
            <input type=\"hidden\" id = \"taskID\" name=\"taskID\" value=\"$q\" />                                                            
            <button type=\"button\" id = \"commentSub\" onClick=\"insertComm(comment, Uname, taskID)\" />Enter Comment</button>
        </div>
    </div>  
</form>";

この部門の名前は commentInsert です。私は AJAX をセットアップして、クリックすると、変数が PHP 関数にプッシュされ、データベースにコメントが挿入されるようにしました。

私が直面している問題は、その PHP 関数に渡すコメントを取得できないことです。

function insertComm(str, uname, id) {
  insertC();

  if(str == "") {
    document.getElementById("commentInsert").innerHTML = "";
    return;
  }
  if(window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
  } else { // code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange = function () {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      document.getElementById("commentInsert").innerHTML = xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET", "subCom.php?q=" + str, true);
  xmlhttp.send();
};

document.getElementByID のようなものを呼び出そうとし、その関数を insertC(); として呼び出すことで、この関数をいじっています。しかし、insertC() 関数の有無にかかわらず、Javascript 関数の 3 つの変数を PHP 関数に渡す際にまだ問題があります。変数を 1 つだけ使用してみましたが、まだ渡すのに問題があります。

どんな助けでも大歓迎です。長い投稿で申し訳ありません。

4

2 に答える 2

0

あなたの問題はonClick=\"insertComm(comment, Uname, taskID)\"、これらの 3 つの変数が id に基づいて自動的に設定されることを前提としていると思います。ではない。代わりに、DOM からそれらを読み取る必要があります。次に例を示します。

var str = document.getElementById("comment").value;
var uname = document.getElementById("Uname").value;
var id = document.getElementById("taskID").value;

これらを の先頭に追加すると、insertCommわざわざ引数を渡す必要がなくなります。

PHP スクリプトがこれら 3 つすべてにアクセスできるようにするには、リクエストを に送信するときにunameidを渡す必要があります。注:ユーザーが要求を台無しにする可能性のある予期しない文字 (& など) を挿入した場合に備えて、encodeURIComponentを使用してこれらのパラメーターをエンコードすることをお勧めします。strsubCom.php

于 2013-05-22T01:36:18.760 に答える