Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ajax/php表单和变量赋值_Php_Ajax - Fatal编程技术网

ajax/php表单和变量赋值

ajax/php表单和变量赋值,php,ajax,Php,Ajax,我的目标是在php中的while循环中向AJAX函数提交一组变量。这是我第一次尝试使用AJAX,所以请原谅它是否凌乱,并且不接近正确。我感谢任何帮助 PHP表单: x=0; while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { $id = $row['col1']; $ad = $row['col2']; cho

我的目标是在php中的while循环中向AJAX函数提交一组变量。这是我第一次尝试使用AJAX,所以请原谅它是否凌乱,并且不接近正确。我感谢任何帮助

PHP表单:

                x=0;
    while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
        {
            $id = $row['col1'];
            $ad = $row['col2'];
            cho '<form id="msu_form">';
            echo "<tr><td>{$ad}</td>";
            echo "<td>";

            $query2 = "SELECT col1,col2 FROM table WHERE notes = 'x'";
            $result2 = mysql_query($query2);
            $count2 = mysql_num_rows($result2);
             if($count2 > 0)
            {
                echo '<select class="Primary" name="primary" onchange=doAjaxPost()>';
                while($row2 = mysql_fetch_array($result2))
                {
                    echo "<option value=".$row2['col1'].">".$row2['col2']."</option>";
                }
                echo "</select>";
            }else
            {
                echo "Blah";
            }
            echo "</td>";
            echo "<td>";                    
            $query3 = "SELECT col1,col2 FROM table2 WHERE notes = 'y'";
            $result3 = mysql_query($query3);
            $count3 = mysql_num_rows($result3);
            if($count3 > 0)
            {
                 echo '<select class="Secondary" name="secondary">';
                 while($row3 = mysql_fetch_array($result3))
                {
                    echo "<option value=".$row3['col1'].">".$row3['col2']."</option>";
                }
                echo "</select>";
            }else
            {
                echo "Bah";
            }
            echo "</td>";
            echo '<input type="hidden" class="ID" name="ID" value="'.$id.'"/>';
            echo '<input type="hidden" class="desc" name="desc" value="'.$ad.'"/>';
            //echo '<td>'."<input type='submit' name='btnupdate' value='UPDATE' /></td>";
            echo '</form>';
            $x = $x+1;
         }
因此,每次我更改屏幕上的任何主要选择框时,只会得到第一行的变量值。我想从选择框接收表单的值。我已经通过一个按钮对其进行了测试,该按钮提交了被注释掉的表单,但该按钮将所有正确的信息提交到页面,但我不想每次都提交数据。有没有办法实现我的目标

谢谢-下面是ajax,如果它有助于回答问题的话

                    <script>  
                function doAjaxPost() {  
                 // get the form values  
                 var primary = $(this).val();
                 var secondary = $(this).parent().next().child('.Secondary').val();
                 var hidden = $(this).parent().nextAll('.ID').val();
                 //var desc = $(this).parent().nextAll('#desc').val();
                 $.ajax({  
                   type: "POST",  
                   url: "functions/database_write.php",
                   data: $('#msu_form').serialize(),
                   //data: "Primary="+primary+"&Hidden="+hidden+"&Secondary="+secondary,
                   success: function(resp){  
                      //we have the response  
                    alert("'" + resp + "'");  
                   },  
                   error: function(e){  
                     alert('Error: ' + e);  
                   }  
                 });  
                }  
                </script>

如果正常提交时一切正常,那么可能是您生成的ajax数据错误,请为表单指定一个id:

echo '<form id="myform">';
编辑好你的编辑已经清理了一些东西,我没有注意到你有多个表单

使用与上述相同的doAjaxPost函数,将数据属性更改为:

  data: $(this).parents('form').serialize();

首先,在php代码中使用id更改以下4行

然后,在javascript代码中,更改

function doAjaxPost() {
 var primary = $('#Primary').val();  
 var secondary = $('#Secondary').val();
 var hidden = $('#ID').val();
 var desc = $('#desc').val();
编辑


. 它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果选择PDO,.while$row=mysql\u fetch\u array$retval,mysql\u ASSOC循环执行多少次?如果超过1次,您将有n个id=Primary,n个id=Secondary,n个id=id,n个id=desc。由于id在文档中应该是唯一的,您的jQuery将查找每个id的第一个,而不是您想要的那个。如果我有一个始终在更改的变量,它将循环多次,我以后怎么引用它呢?我尝试了你的建议,但是现在第一行总是被返回,第二行只是被提交。还有不止两行。@user3582887请编辑您的问题以显示生成的html,因为php很难跟上。好的,我在试图用一个不断变化的变量重命名ID后编辑了我的问题,我返回-print\u r$POST,但我始终只收到一行。索引只针对一行,例如x等于1,所以我返回primary1=>1000,secondary1=>450,ID1=903。。。因此,即使每个索引都有一个唯一的名称,但仍然没有选择正确的行?我已将代码修改为建议的数据属性,它运行函数,但现在返回一个空数组?谢谢你到目前为止的所有意见。我按照你的建议做了更改,现在什么也没发生?好像脚本没有运行?很抱歉,我的示例未经测试,因此出现了一些错误。我已经编辑了我的答案。在php中,需要有onchange=doAjaxPostthis,其中this是指更改了哪个select的引用。然后在js->function doAjaxPostsel{…$sel…中,sel引用您的选择。请查看编辑的代码部分。谢谢,但它仍然不工作?脚本似乎没有运行?我可能缺少什么?再次感谢。使用我在回答中编辑的两个代码块应该可以工作。下面是一个JSFIDLE示例
echo "<select id=Primary name=primary onchange=doAjaxPost()>"; 
echo "<select id=Secondary name=secondary>";
echo '<input type="hidden" id="ID" name="ID" value="'.$id.'"/>';
echo '<input type="hidden" id="desc" name="desc" value="'.$ad.'"/>';
echo '<select class="Primary" name="primary" onchange="doAjaxPost(this)">'; //added (this)
echo '<select class="Secondary" name="secondary">';
echo '<input type="hidden" class="ID" name="ID" value="'.$id.'"/>';
echo '<input type="hidden" class="desc" name="desc" value="'.$ad.'"/>';
function doAjaxPost() {
 var primary = $('#Primary').val();  
 var secondary = $('#Secondary').val();
 var hidden = $('#ID').val();
 var desc = $('#desc').val();
function doAjaxPost(sel) { // added (sel)
 var primary = $(sel).val();  //changed to $(sel)
 var secondary = $(sel).parent().next().children('.Secondary').val(); //changed to $(sel) and changed to children()
 var hidden = $(sel).parent().nextAll('.ID').val(); //changed to $(sel) and changed to nextAll()
 var desc = $(sel).parent().nextAll('#desc').val(); //changed to $(sel) and changed to nextAll()