Каков наилучший способ отладки AJAX для PHP?
У меня жалкое время отладки одной маленькой функции в моем новом проекте.
По сути, у меня есть выход пользователя из системы через вызов AJAX для моего выхода из системы script на моем сервере под названием "userfFunctions.php". Я использую AJAX, так что у меня нет головной боли при написании большего количества регулярных выражений чтобы соответствовать моим mod_rewrites. В любом случае, каждый так часто кажется, что мои данные Post просто плоские, и поскольку PHP работает за кулисами, я чувствую, что у меня нет способа узнать, где поток данных нарушен. BTW Эта функция работает 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!';
}
вот мой замечательный ответ:
alt text http://img517.imageshack.us/img517/6520/screenshot20100517at443.png
Ответы
Ответ 1
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 . '|');
}
}
}
Я написал его так, чтобы он работал только на localhost (по соображениям безопасности), но вы можете легко изменить это, заменив следующий код:
if (($_SERVER['HTTP_HOST'] == 'localhost') && (strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP') !== false))
С
if (strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP') !== false)
Ответ 2
Попробуйте использовать что-то вроде плагина FireBug для Firefox или инструментов разработчика в Chrome, чтобы посмотреть отправленный запрос.
Ответ 3
Вы пытались установить 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);
Ответ 4
Я заметил:
//<-- redirects to userFunctions.php
Когда вы выполняете перенаправление (заголовок ( "Местоположение:" );), вы потеряете свои данные $_POST и $_GET.
(Если вы ссылаетесь на URL переписать (с mod_rewrite), вы должны получить данные.)
Но это не объясняет 19-часовой симптом.
Ответ 5
Вы можете попробовать проверить массив $_POST, с чем-то вроде этого:
var_dump($_POST);
Посмотрите, действительно ли массив заполнен, а затем работает оттуда.
Используя firebug, вы также можете подтвердить, действительно ли сообщение AJAX отправляет данные (проверьте вкладки консоли или сети).