如何在jquery ajax调用期间调试php

时间:2018-09-01 19:22:44

标签: javascript php jquery ajax datatables

我有一个提交给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);

请注意,如果我取消注释除了最后一个回声,则不会填充数据表。那我该如何调试呢?

2 个答案:

答案 0 :(得分:0)

您是否尝试过在PHP脚本中使用isset($_POST['value'])方法?其中value是您将分配给提交按钮的名称。

答案 1 :(得分:0)

我想出了如何调试它。在chrome调试器中,选择“网络”标签,然后从列表中选择“ screen_custom.php”,然后选择“响应”标签。它显示了php的输出。我取消对echo sql语句的注释,并且可以看到实际上,正如我所怀疑的,表单参数没有被读取。

然后我搜索了这个问题,发现解决方案是修改数据参数js,如下所示:

df %>%
  #group_by(group)%>% if you have a third variable and you want to achieve the same results for each group

  mutate(cum_unique_entries = cumsum(!duplicated(value))) %>%
  group_by(depth) %>% # add group variable for more layers
  summarise(cum_unique_entries = last(cum_unique_entries))

我不知道第一个方法为什么不起作用,因为我可以看到在标题中发送了正确的参数。但这有效。