1

当我运行这个时,我得到的只是循环中第一个表单的变量。我假设我的问题是表单在一个数组中,我不知道如何从该数组中获取不同的变量。我是新手。$id 始终相同,但 $law_id 始终是唯一的。我很感激任何帮助。这是我正在制作的一款游戏,当我发布到另一个页面时运行良好,但我真的很想将它保留在一个只刷新输出 div 的页面上。我在代码中有几个循环,但我确信如果我得到这个,我可以管理其余的。

这是我创建表单的 php 循环:

    if ($num_rows > 0){
    while($data = mysql_fetch_object($ballots)){
    $law_id = $data->id;
    $question = $data->question;
    $query3 = "SELECT * FROM initiative_records WHERE initiative_id = '". $law_id ."' AND player_id = '". $id ."'";
    $new_ballots2 = mysql_query($query3,$link) or die("Unable to select: ".mysql_error());
    $num_rows = mysql_num_rows($new_ballots2);
        if ($num_rows == "0"){$x++;
        ?>
            <form name="initiative_create" class="form_inline">
            <input name="pid" type="hidden" value= "<?php echo $id; ?>">
            <input name="gid" type="hidden" value= "<?php echo $law_id; ?>">
            <input type="button" id="button" value="<?php echo $question; ?>" onclick='JavaScript:xmlhttpPost1("initiative_info.php")'>
            </form><br />
            <?php
        }
    }

我的 ajax 脚本:

function xmlhttpPost1(strURL) {
var xmlHttpReq = false;
var self = this;
// Mozilla/Safari
if (window.XMLHttpRequest) {
    self.xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
    self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpReq.open('POST', strURL, true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
self.xmlHttpReq.onreadystatechange = function() {
    if (self.xmlHttpReq.readyState == 4) {
        updatepage1(self.xmlHttpReq.responseText);
    }
}
self.xmlHttpReq.send(getquerystring1());
}
function getquerystring1() {
    var form     = document.forms['initiative_create'];
var gid = form.gid.value;
var id = form.pid.value;
qstr = 'pid=' + escape(id) + '&' + 'gid=' + escape(gid);  // NOTE: no '?' before querystring
return qstr;
}
function updatepage1(str){
document.getElementById("result").innerHTML = str;
}
4

2 回答 2

0

您应该为每个表单分配一个唯一的名称并将其传递给您的函数。例子:

<form name="initiative_create<?php echo $x; ?>">
...
<input type="button" id="button" value="<?php echo $question; ?>"
 onclick='JavaScript:xmlhttpPost1("initiative_info.php", <?php echo $x; ?>)'>

你的功能是

function xmlhttpPost1(strURL, name_index) {
...
self.xmlHttpReq.send(getquerystring1(name_index));

function getquerystring1(name_index) {
...
var form     = document.forms['initiative_create' + name_index];

如果我理解正确并且 $x 变量是一个计数器。如果没有,请使用 $i 或其他东西。

我想你明白我建议改变的内容和原因。

于 2013-10-04T01:50:45.957 回答
0

问题在于这行代码:

var form = document.forms['initiative_create'];

由于您要创建多个具有相同名称的表单,因此只有其中一个可以工作。

我真的建议您使用像 jQuery 这样的库来让您自己更轻松地完成这些任务。类似上面的脚本可以用 4 行代码编写:

$('form[name=initiative_create]').submit(function ( event ) {
    event.preventDefault();
    $('#result').load('initiative_info.php', $(this).serialize());
});
于 2013-10-04T02:40:03.340 回答