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 函数时遇到问题,我只用一个变量进行了尝试,但仍然无法让它通过。

任何帮助将不胜感激。对不起,很长的帖子。

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,则无需费心传递参数。

uname如果您希望您的 PHP 脚本能够访问所有这 3 个,您需要在将您idstr请求发送到subCom.php. 注意:最好使用encodeURIComponent对这些参数进行编码,以防用户插入意外字符(如 &),这可能会弄乱您的请求。

于 2013-05-22T01:36:18.760 回答
0
... onClick=\"insertComm(comment, Uname, taskID)\" ...

单击按钮时comment,由于您使用的是内联代码,因此会UnametaskID解析;document尽管这确实不应该被依赖,但它的工作原理是这样的:

comment = document.getElementById('comment');
// etc

因此,您的函数insertComm()是使用 DOM 元素而不是实际字符串调用的。要在您的函数中使用它们,您可以使用comment.value例如:

xmlhttp.open("GET", "subCom.php?q=" + encodeURIComponent(str.value), true);

另请注意,例如,我encodeURIComponent()用于防止由字符串值中的空格引起的格式错误的 URL。

但是,如果您像这样在 HTML 中传递标识符会更好:

... onClick=\"insertComm('comment', 'Uname', 'taskID')\" ...

在你的里面insertComm()

var str = document.getElementById(comment).value;
xmlhttp.open("GET", "subCom.php?q=" + encodeURIComponent(str), true);
于 2013-05-22T01:52:11.377 回答