[英]how to debug php during jquery ajax call
我有提交給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
}
這是php中處理表單數據並返回json的部分:
$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);
請注意,如果我取消注釋除了最后一個回聲,則不會填充數據表。 那么我該如何調試呢?
您是否嘗試過在PHP腳本上使用isset($_POST['value'])
方法? 其中value是您將分配給提交按鈕的名稱。
我想出了如何調試它。 在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;
});
},
我不知道第一個方法為什么不起作用,因為我可以看到在標題中發送了正確的參數。 但這有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.