【发布时间】:2018-09-01 19:22:43
【问题描述】:
我有一个提交给 php 服务器的 html 表单。如果我使用提交按钮和 action="screen_custom.php" 以标准方式提交表单,那么它可以正常工作。我看到一个充满有效 JSON 数据的页面。
但如果我使用 jquery ajax 调用提交表单,则会返回一个空的 json 数组。我相信 php 由于某种未知原因无法找到表单值。无论如何,如何在 ajax 调用期间调试 php?响应必须只包含填充 jquery DataTable 所需的数据。如果我回显调试输出,则数据表将无法填充。
下面是一些成功提交表单到php并返回好的json数据的代码。
<form id="criteriaForm" method="post" action="screen_custom.php">
<table>
<tr>
<th>Filter By</th><th>Criteria</th><th title="Show this column">Show</th>
</tr>
<tr>
<td><label title="Percentage increase">Appreciation Potential (%)</label></td>
<td>
<select name="upside">
<option value="any">Any</option>
<option value="gt0">> 0%</option>
<option value="gt10">> 10%</option>
</select>
</td>
<td><input type="checkbox" id="showUpside" name="showUpside" value="true">
</tr>
</table>
<input type="submit" value="Run">
</form>
这是一些无法返回相同 json 数据的代码:
<form id="criteriaForm" method="post" action="">
<table>
<tr>
<th>Filter By</th><th>Criteria</th><th title="Show this column">Show</th>
</tr>
<tr>
<td><label title="Percentage increase">Appreciation Potential (%)</label></td>
<td>
<select name="upside">
<option value="any">Any</option>
<option value="gt0">> 0%</option>
<option value="gt10">> 10%</option>
</select>
</td>
<td><input type="checkbox" id="showUpside" name="showUpside" value="true">
</tr>
</table>
<button type="button" onclick="runCustomScreen()">Run</button>
</form>
还有 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
}
这是处理表单数据并返回 json 的 php 部分:
$upside = $_POST["upside"];
$sql = "SELECT * FROM stocks " .$where;
//echo '<script>'
//echo 'sql=' .$sql .'<br>';
//echo 'console.log(' .$sql .')';
//echo '</script>';
$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 .'}';只是...为什么? -
您需要在返回时指定数据类型,因为您是在 json 中编码。在成功函数之前添加ajax调用:dataType:“json”,从php端你只需要返回$data,如:echo $data;
标签: javascript php jquery ajax datatables