我有提交给php服务器的html表单。如果我以带有提交按钮和action =" screen_custom.php"的标准方式提交表单,则可以正常工作。我看到一个充满有效JSON数据的页面。
但是,如果我使用jquery ajax调用提交表单,则会返回一个空的json数组。我相信php由于某些未知原因无法找到表单值。无论如何,我如何在ajax调用期间调试php?响应必须仅包含填充jquery DataTable所需的数据。如果我回显调试输出,则数据表将无法填充。
这是一些将表单成功提交到php并返回良好json数据的代码。
Filter By | Criteria | Show |
---|---|---|
Appreciation Potential (%) | Any > 0% > 10% |
这是一些无法返回相同json数据的代码:
Filter By | Criteria | Show |
---|---|---|
Appreciation Potential (%) | Any > 0% > 10% |
Run
和javascript:
function runCustomScreen() {
$('#customTable').DataTable({
"ajax": {
type: 'POST',
url:"screen_custom.php",
data: $('#criteriaForm').serialize(),
complete: function(jqXHR, textStatus) {
console.log("Run was successful, textStatus="+textStatus);
},
error: function(e, textStatus, errorThrown) {
alert("textStatus="+textStatus +", errorThrown="+errorThrown);
}
}
});
return false; //needed if called by onclick event
}
这是php中处理表单数据并返回json的部分:
$upside = $_POST["upside"];
$sql ="SELECT * FROM stocks" .$where;
//echo ''
//echo 'sql=' .$sql .'';
//echo 'console.log(' .$sql .')';
//echo '';
$rs = mysql_query($sql);
//store result in an array
$results = array();
while($row = mysql_fetch_object($rs))
{
$results[] = $row;
}
$data = json_encode($results);
echo '{"data":' .$data .'}';
//close the db connection
mysql_close($connection);
请注意,如果我取消注释除了最后一个回声,则不会填充数据表。那么我该如何调试呢?
可能是分开的,但是echo {"data": .$data .};只是...为什么?
您需要在返回时指定dataType,因为您是json中的encodin。 在成功函数之前添加ajax调用:dataType:" json",从php端,您只需要返回$ data,例如:echo $ data;
我想出了如何调试它。 在chrome调试器中,选择"网络"标签,然后从列表中选择" screen_custom.php",然后选择"响应"标签。 它显示了php的输出。 我取消对echo sql语句的注释,并且可以看到实际上,正如我所怀疑的,表单参数没有被读取。
然后我搜索了这个问题,发现解决方案是修改数据paramenter js,如下所示:
data: function(d) {
var form_data = $('#criteriaForm').serializeArray();
$.each(form_data, function(key,val) {
d[val.name] = val.value;
});
},
我不知道第一个方法为什么不起作用,因为我可以看到在标题中发送了正确的参数。 但这有效。
您是否尝试过在PHP脚本上使用isset($_POST['value'])方法? 其中value是您将分配给提交按钮的名称。
我想出了如何调试它。 在chrome调试器中,选择"网络"标签,然后从列表中选择" screen_custom.php",然后选择"响应"标签。 它显示了php的输出。 我取消对echo sql语句的注释,并且可以看到实际上,正如我所怀疑的,表单参数没有被读取。 但为什么?
@ user3217883尝试将名称也设置为选择框中的选项值