簡體   English   中英

如何在jquery ajax調用期間調試php

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM