как отлаживать php во время вызова jquery ajax - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть HTML-форма, которую я отправляю на php-сервер. Если я отправляю форму стандартным способом с кнопкой отправки и действием = "screen_custom.php", то он работает нормально. Я вижу страницу, полную действительных данных JSON.

Но если я отправлю форму с помощью вызова jquery ajax, то будет возвращен пустой массив json. Я считаю, что php не может найти значения формы по неизвестной причине. В любом случае, как мне отладить php во время вызова ajax? Ответ должен включать только данные, необходимые для заполнения 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 голосов
/ 01 сентября 2018

Я разобрался, как его отладить. В отладчике Chrome выберите вкладку «Сеть», затем выберите «screen_custom.php» из списка и выберите вкладку «Ответ». Показывает вывод из php. Я раскомментировал оператор echo sql и увидел, что на самом деле параметры формы не читаются, как я и подозревал.

Затем я погуглил эту проблему и обнаружил, что решение состоит в том, чтобы изменить параметр данных js, как показано ниже:

        data: function(d) {
            var form_data = $('#criteriaForm').serializeArray();
            $.each(form_data, function(key,val) {
                d[val.name] = val.value;
            });
        },

Я не знаю, почему первый метод не работал, так как я мог видеть правильные параметры, отправляемые в заголовок. Но это работает.

0 голосов
/ 01 сентября 2018

Вы пытались использовать метод isset($_POST['value']) в своем php-скрипте? где значение - это имя, которое вы назначите кнопке отправки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...