Каков наилучший способ отладки вызовов AJAX в PHP? - PullRequest
11 голосов
/ 18 мая 2010

У меня жалкое время на отладку одной маленькой функции в моем новом проекте.

По сути, у меня есть пользовательский выход из системы с помощью вызова AJAX моего сценария выхода из системы на моем сервере с именем "userfFunctions.php". Я использую AJAX, поэтому у меня нет головной боли при написании большего количества регулярных выражений для соответствия мои mod_rewrites. В любом случае, время от времени кажется, что мои данные Post просто умирают, и, поскольку PHP работает за кулисами, я чувствую, что у меня нет никакого способа узнать, где поток данных прерывается. Кстати, эта функция работает 19 часов дня.

Вот функция JavaScript:

function logOut(){
    var data = new Object;
    data.log_out = true;
    $.ajax({
        type: 'POST',
        url: 'http://www.mydomain.com/User_Validator', //<-- redirects to userFunctions.php
        data: data,
        success: function(data) {
        alert(data); // <-- a response is triggered but with no response data!
        }
    });
}

сторона php:

if(isset($_POST['log_out'])){
     echo 'alert this!';
}

вот мой удивительный ответ: альтернативный текст http://img517.imageshack.us/img517/6520/screenshot20100517at443.png

Ответы [ 5 ]

9 голосов
/ 18 мая 2010

FirePHP :

FirePHP позволяет вам войти в свой Firebug Console с использованием простого PHP вызов метода.

Все данные отправляются через заголовки ответа. и не будет мешать содержание на вашей странице.

FirePHP идеально подходит для AJAX разработка, где чистые JSON и XML ответы обязательны.

Вот минималистичная реализация, которую я написал:

function FirePHP($message, $label = null, $type = 'LOG')
{
    static $i = 0;

    if (headers_sent() === false)
    {
        $type = (in_array($type, array('LOG', 'INFO', 'WARN', 'ERROR')) === false) ? 'LOG' : $type;

        if (($_SERVER['HTTP_HOST'] == 'localhost') && (strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP') !== false))
        {
            $message = json_encode(array(array('Type' => $type, 'Label' => $label), $message));

            if ($i == 0)
            {
                header('X-Wf-Protocol-1: http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
                header('X-Wf-1-Plugin-1: http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3');
                header('X-Wf-1-Structure-1: http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
            }

            header('X-Wf-1-1-1-' . ++$i . ': ' . strlen($message) . '|' . $message . '|');
        }
    }
}

Я написал так, чтобы он работал только на локальном хосте (по соображениям безопасности), но вы можете легко изменить это, заменив следующий код:

if (($_SERVER['HTTP_HOST'] == 'localhost') && (strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP') !== false))

С:

if (strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP') !== false)
8 голосов
/ 18 мая 2010

Попробуйте использовать что-то вроде плагина FireBug для Firefox или Инструменты разработчика в Chrome, чтобы посмотреть на отправляемый запрос.

2 голосов
/ 18 мая 2010

Вы пытались установить dataType на "text"?

function logOut(){
    var data = {
        "log_out" : true
    };
    $.ajax({
        type: 'POST',
        url: 'http://www.mydomain.com/User_Validator',
        data: data,
        success: function(data) {
            alert(data);
        },
        dataType : 'text'
    });
}

Кроме того, я бы изменил ваш PHP на это:

print_r($_POST);
0 голосов
/ 18 мая 2010

Вы можете попробовать проверить сам массив $ _POST, примерно так:

var_dump($_POST);

Посмотрите, заполняется ли массив вообще, а затем работайте оттуда. Используя firebug, вы также можете проверить, действительно ли пост AJAX отправляет данные (проверьте вкладки консоли или сети).

0 голосов
/ 18 мая 2010

Я заметил:

//<-- redirects to userFunctions.php

Когда вы выполните перенаправление (заголовок ("Location:");), вы потеряете ваши данные $ _POST и $ _GET. (Если вы ссылаетесь на URL rewrite (с mod_rewrite), вы должны получить данные.)

Но это не объясняет 19-часовой симптом.

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