我是Jquery的新手,并试图在不久前重新创建混乱的东西,具有类似的功能。
我在此处粘贴了我的代码:http://pastebin.com/SYM45WPw
我有一个基于上一页表格结果创建的表格(这一切都正常),第一列中有学生姓名,之后的每一列都是测试要求的结果,只需通过/失败下拉,并为每个人和每个要求我想要继续并选择结果,并将结果提交到背景中的DB,然后删除选择选项并显示结果。
目前在post_result.php我有这个,只是文字我得到一个结果:
if($_POST['studentID'] != ""){
echo "Success";
}
非常感谢所有帮助,
编辑:(取自pastebin链接)
<?php
ini_set('error_reporting', E_ALL);
$student_name = $_POST['student_name'];
$class = $_POST['class'];
$month = $_POST['month'];
?>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("select#result").change(function() {
var studentID = $(this).find("input[name='student_name']").val();
var result = $(this).serialize();
$.post('post_result.php', result, function(data) {
// We not pop the output inside the #output DIV.
$("#output-" + studentID).html(data);
});
$("#"+studentID+"-formarea").hide();
return false;
});
});
</script>
</head>
<body>
<?php
require 'db_connect.php';
$header=1;
$query = mysql_query("SELECT * FROM requirements WHERE `class` = '$class' && month = $month ") or die("Error:". mysql_errno());
?>
<table class="tg" border="1">
<tr>
<th class="tg-031e">Student Name</th>
<?php while ($row = mysql_fetch_array($query)) {
echo '<th class="tg-031e">'.$row['requirement'].'</th>';
$header++;
}
?>
</tr>
<?php
for ($i = 0; $i < count($student_name); $i++) {
echo '<tr>';
echo ' <td class="tg-031e">'.$student_name[$i].'</td>';
for ($count = 1; $count < $header; $count++) {
echo '<td><div id="'.$student_name.'-formarea">'
. '<form method="POST" id="form-'.$student_name.'">'
. '<input type="hidden" name="student_name" value="'.$student_name.'" />'
. '<select name="result" id="result"><option selected>Select Result</option>'
. '<option value="Pass">Pass</option><option value="Fail">Fail</option></select>'
. '</form></div>'
. '<div id="output-'.$student_name[$i].'"></div></td>';
}
echo'</tr>';
}
?>
</table>
</body>
</html>
答案 0 :(得分:0)
您正在序列化Select元素,而不是表单,您必须序列化表单。 例如:
<form id="myForm" action="blabla" method="blabla">
<select id="result" name="result">
<option>Bla Bla Bla</option>
</select>
<input type="text" name="student_name" />
<!-- ...more elements .... -->
</form>
所以你必须更换:
var result = $(this).serialize()
//by:
var result = $("#myForm").serialize()
答案 1 :(得分:0)
在您通过Ajax发送数据的文件中,您将'studentID'作为密钥,但在您要序列化的表单中,密钥是从name =''属性分配的。这会产生你的密钥:'student_name'和'result'。
if($_POST['studentID'] != ""){
echo "Success";
}
您可以通过将以下内容放入Ajax发送和接收的php文件中来确定这一点。这将打印您的php文件接收的帖子内容数组。
print_r($_POST);
结果表示该数组将显示在div中,告诉Ajax放置结果。
这是序列化您正在为Ajax工作的表单的好方法。
var result = $(this).closest('form').serialize();