ajax/php表单和变量赋值
我的目标是在php中的while循环中向AJAX函数提交一组变量。这是我第一次尝试使用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
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()