ajax-запрос с прототипом возвращает 200 успехов с пустой HTML-страницей (с перерывами) - PullRequest
2 голосов
/ 21 июля 2009

У меня есть страница, выполняющая следующий ajax-запрос при нажатии кнопки.

обычно я получаю объект json обратно, и он работает нормально, я заметил, что по прерывистым запросам (обычно только по первому запросу с этой страницы), я возвращаю код успеха 200 с пустой страницей.

Если я перезагружаю HTML-страницу, а затем снова нажимаю кнопку, она сразу же работает нормально.

периодически я имею в виду, что не могу воспроизвести проблему по своему желанию, но это происходит достаточно регулярно, и мне нужно что-то с этим делать

Мне просто интересно, если это, скорее всего, ajax или, в частности, проблема с прототипом или проблема на стороне сервера (я использую debian / apahce / php)

что я могу попытаться отследить проблему?

new Ajax.Request( url, 
{
    method:'post',
    parameters: $('TeamForm').serialize(true),
    onSuccess: function(transport) {
        // do stuff                     

    },
    onFailure: function(transport) { 
        // display error

    }
 });

Ответы [ 2 ]

1 голос
/ 22 июля 2009

Это не решение вашей проблемы, а обходной путь - тем временем вы можете определить, имеет ли свойство responseJSON ответа значение NULL, и если это так, зарегистрировать ошибку и повторно отправить запрос. Таким образом, по крайней мере, второй запрос должен пройти. Самым простым способом решения этой проблемы может быть выбрасывание пользовательского объекта из обработчика onSuccess, позволяющего обработчику onFailure отлавливать его и повторно отправлять.

0 голосов
/ 22 июля 2009

Исходя из приведенного вами примера, единственный источник беспокойства, который я могу видеть с помощью javascript, это $ ('TeamForm'). Serialize (true); заявление. Вы уверены, что TeamForm имеет правильно сформированные данные, и ваш PHP-бэкэнд обрабатывает это должным образом?

Проверьте ваш код PHP на наличие пробелов в конце. Вы не должны заканчивать свои PHP-файлы закрывающим тегом.

, например

<?php
class Foo {
}
?> //There is a space after this closing tag!

Это приведет к отправке скрытого пространства в ваш браузер. Это допустимый синтаксис (и рекомендуется), чтобы оставить закрывающий тег вне чистого файла PHP:

<?php
class Foo {
}

Также проверьте свой код на наличие эхо-сигналов или отпечатков, которые могут отправлять выходные данные в браузер. Также проверьте настройку display_errors, поскольку сообщение об ошибке может также привести к отправке данных в браузер.

Я бы поставил шансы 99: 1 на стороне сервера.

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