【发布时间】:2014-04-23 14:42:18
【问题描述】:
我正在创建一个单页 PHP 应用程序并尝试通过 ajax .post() 提交表单,而不是通过导航离开的典型表单提交。问题是我不知道如何正确获取所有信息的数组,所以我可以将它传递给 .post() 命令。
下面的代码生成表格,并从数据库中提取所有数据,如果我将它包装在一个表格标签中,它将按原样工作。如果您单击侧栏上的 Ajax 菜单,您可以在此处查看处理后的版本以及一些调试代码:http://tinyurl.com/lq4fe8a
<?
include 'db.php';
$i=0;
foreach($db->query('SELECT * from navmenu') as $row) {
$rowarray[$i] = array();
echo ($i % 2)?'<tr class="odd">':'<tr class="even">';
print_r("<td width=200>" . $row[2] . "</td>");
print_r("<input type=\"hidden\" id=\"");
$row[2] = str_replace(' ', '_', $row[2]);
print_r("". $row[2] . "[0]\" value=\"" . $row[0] . "\">");
print_r("<td><input type=\"textbox\" id=\"" . $row[2] . "[1]\" size=\"75\" value=\"" . $row[3] . "\"></td>");
//parent selection
print_r("<td><select id=\"" . $row[2] . "[2]\">");
if($row[1] == "0"){
print_r("<option value=\"0\" selected>No Parent</option>");
}
foreach($db->query('SELECT * from navmenu') as $option) {
print_r("<option value=\"" . $option[0] . "\"");
if($row[1] == $option[0]){
print_r(" selected");
}
print_r(">" . $option[2] ."</option>");
}
// end foreach
print_r("</select></td>");
print_r("<td><input type=\"textbox\" id=\"" . $row[2] . "[3]\" size=\"5\" value=\"" . $row[4] . "\"></td>");
// setup status whether active or not
print_r("<td><input type=\"hidden\" id=\"" . $row[2] . "[4]\" value=\"INACTIVE\"> "); //set value so it never passes NULL
if ($row[3] == "ACTIVE"){
print_r("<input type=\"checkbox\" id=\"" . $row[2] . "[4]\" value=\"ACTIVE\" checked=\"true\"></td></tr>");
}
else{
print_r("<input type=\"checkbox\" id=\"" . $row[2] . "[4]\" value=\"ACTIVE\"></td></tr>");
}
print_r("\n");
$rowarray[$i]= array("$row[2][0]", "$row[2][1]", "$row[2][2]", "$row[2][3]", "$row[2][4]");
$i++; //increment by one
}
?>
在我在 foreach 循环中定义 $rowarray 的底部,我试图将表单中的所有信息添加到单个数组中,但结果却是:
array
0 =>
array
0 => string 'Settings[0]' (length=11)
1 => string 'Settings[1]' (length=11)
2 => string 'Settings[2]' (length=11)
3 => string 'Settings[3]' (length=11)
4 => string 'Settings[4]' (length=11)
1 =>
array
0 => string 'Grid_Demo[0]' (length=12)
1 => string 'Grid_Demo[1]' (length=12)
2 => string 'Grid_Demo[2]' (length=12)
3 => string 'Grid_Demo[3]' (length=12)
4 => string 'Grid_Demo[4]' (length=12)
2 =>
array
0 => string 'TEST[0]' (length=7)
1 => string 'TEST[1]' (length=7)
2 => string 'TEST[2]' (length=7)
3 => string 'TEST[3]' (length=7)
4 => string 'TEST[4]' (length=7)
它将项目存储为字符串而不是子数组,因此我无法执行 print_r($rowarray[0][0]) 之类的操作来获取内容。不知道我做错了什么或从这里去哪里。值得一提的是,这里是 javascript 提交代码。
<script>
$(document).ready(function () {
$("a[id^=formsubmit]").click(function ( event ) {
$.post("functions.php?do=adminmenu",{
// Send these values via POST
<?
foreach ($rowarray as $index => $option) {
foreach ($option as $rowitem => $rowval)
{
$option = str_replace(' ', '_', $option);
print "$index:$('[id^=\'$rowval\']').val(), ";
}
}
print "$index:$('#$rowval').val()";
?>
}
,function (data) {
$( ".contentarea2" ).html( data );
},"html");
});
});
</script>
【问题讨论】:
-
当您在浏览器中查看源代码时,Javascript 是什么样的?我怀疑为您的值传递给
$.post方法的对象无效或未生成您想要的结构。 -
@Kryten 下面是 javascript,但现在更大的问题是 $rowarray 没有正确的信息。
-
标签: javascript php jquery ajax arrays