jQuery - Ошибка возврата Ajax 500 на некоторых сообщениях

У меня есть некоторый Ajax, который работал над живым сайтом, теперь он прекратил работать. Ajax должен возвращать страницу, но возвращает 500 ошибок (внутренняя ошибка сервера).

Странная вещь, я могу переместиться и отправить на страницу, которую называет Ajax, таким образом, страница только не работает через вызов Ajax ($ .post).

Другая странная вещь - это, хорошо работает локально, но не живой. Также все другие Ajax на сайте работает.

У кого-либо есть самое туманное, каково это могло бы быть? По тому, как это - весь jQuery с CakePHP.

Править:

В апачских журналах ошибок говорится: "Преждевременный конец заголовков сценария: сценарий PHP, ссылающийся домен..."

Редактирование 2:

Все это произошло, когда я переключил сервер на SSL. Это говорит выше ошибки и затем "Порта 80".

6
задан MintDeparture 3 August 2010 в 15:42
поделиться

6 ответов

Во-первых, это не имеет никакого отношения к jQuery, AJAX, POST, CakePHP или HTTP-заголовкам. Полное сообщение об ошибке - "Преждевременное завершение скрипта", что означает, что процесс PHP, который Apache использует для выполнения PHP-скрипта, неожиданно завершился (т.е. до того, как процесс PHP завершил свою часть протокола Fast CGI). Обычно это означает, что процесс PHP завершился аварийно или вызвал "ошибку сегментации".

Ошибки сегментации PHP могут быть сложными для устранения, и они никогда не должны происходить; PHP никогда не должен аварийно завершать работу. Причина сбоя может заключаться в нескольких вещах. Хотя, возможно, это просто исправить.

Первое, что я бы сделал, это полностью удалил PHP и установил последнюю стабильную версию. Если вы используете PHP 5.3 и Windows, то вам следует использовать только двоичные файлы VC6 (пакет "VC6 x86 Thread Safe"); пакет VC9 приведет к сбою PHP при использовании Apache. Переустановка может решить вашу проблему, поскольку DLLs/SOs расширений более старых версий PHP могут все еще существовать в вашем каталоге расширений на живом сервере.

Если вы работаете под Windows и используете MySQL, следующее, что я должен сделать, это убедиться, что каталог MySQL bin находится в Path живого сервера. Это необходимо для того, чтобы убедиться, что libmySQL.dll может быть "найден" ОС. Вы должны иметь возможность подключиться по SSH к живому серверу, ввести mysql --help и увидеть сообщение об использовании клиента MySQL CLI. Перезапустите Apache, если вы добавили каталог MySQL bin в Path.

Если оба этих предложения не решают проблему, то, пожалуйста, дополните свой вопрос ответами на следующие вопросы:

  1. Используете ли вы веб-хост или ИТ-отдел компании управляет сервером для вашего использования?
  2. Если используете веб-хост, арендуете ли вы выделенный сервер?
  3. Какая у вас операционная система?
  4. Какую версию PHP вы используете?
  5. Какие расширения PHP загружаются?
  6. Загружаете ли вы расширения Zend?
  7. Используете ли вы когда-нибудь dl?

UPDATE: С версии 5.3.6 и выше проект PHP больше не выпускает установщиков "VC6". Рекомендуется установить сборку Apache HTTPD из Apache Lounge и использовать установщик "VC9".

6
ответ дан 9 December 2019 в 22:28
поделиться

Проверьте журналы ошибок apache и php ! он будет там


. Наиболее частой причиной этой проблемы является завершение работы сценария перед отправкой полного набора заголовков или, возможно, любого из них на сервер. Чтобы проверить, так ли это, попробуйте запустить сценарий автономно из интерактивного сеанса, а не как сценарий на сервере. Если вы получаете сообщения об ошибках, это почти наверняка причина сообщения «преждевременное завершение заголовков скрипта». Даже если CGI нормально работает из командной строки, помните, что среда и разрешения могут отличаться при работе на веб-сервере.CGI может получить доступ только к ресурсам, разрешенным для пользователя и группы, указанных в вашей конфигурации Apache. Кроме того, среда не будет такой же, как в командной строке, но ее можно настроить с помощью директив, предоставляемых mod_env.

Вторая наиболее частая причина этого (не считая того, что люди вообще не выводят требуемые заголовки) - это результат взаимодействия с буферизацией вывода Perl. Чтобы Perl очищал свои буферы после каждого оператора вывода, вставьте следующие операторы вокруг операторов печати или записи, которые отправляют ваши HTTP-заголовки:

{
    local ($oldbar) = $|;
    $cfh = select (STDOUT);
    $| = 1;
    #
    # print your HTTP headers here
    #
    $| = $oldbar;
    select ($cfh);
}

Это обычно необходимо только тогда, когда вы вызываете внешние программы из вашего сценария, которые отправляют вывод на stdout, или если будет большая задержка между отправкой заголовков и началом передачи фактического содержимого. Чтобы максимизировать производительность, вы должны отключить очистку буфера (с $ | = 0 или эквивалентным) после операторов, отправляющих заголовки, как показано выше.

Если ваш сценарий написан не на Perl, сделайте то же самое для любого языка, который вы используете (например, для C вызовите fflush () после записи заголовков).

Другой причиной сообщения «преждевременный конец заголовков сценария» являются директивы RLimitCPU и RLimitMEM. Вы можете получить сообщение, если сценарий CGI был убит из-за ограничения ресурсов.

Кроме того, проблема конфигурации в suEXEC, mod_perl или другом стороннем модуле часто может мешать выполнению вашего CGI и вызывать сообщение «преждевременный конец заголовков скрипта».


CPHP:

4
ответ дан 9 December 2019 в 22:28
поделиться

Вы можете использовать Fidler , чтобы проверить, что сервер вернул во время этого $ .post. Он будет содержать веб-страницу, которая была бы возвращена, если бы вы запустили тот же метод непосредственно в своем браузере.

0
ответ дан 9 December 2019 в 22:28
поделиться

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

Что делает ваша страница...? Вот некоторые предположения.

Если ваша страница похожа на страницу автозаполнения, то есть вы передаете немного информации и получаете отфильтрованный список результатов... Возможно, ваш AJAX-скрипт не передает обратно элемент данных, и ваша страница пытается вернуть все. Очень громоздкие PHP-скрипты (т.е. интенсивные/рекурсивные операции) могут вызвать эту ошибку.

Обычный совет по устранению этой конкретной ошибки заключается в том, чтобы вернуться к стабильной странице и затем начать добавлять материал обратно - так что, возможно, направьте ваш AJAX-скрипт на страницу, на которой есть это...

<?php
    echo 'If this appears, we\'re stable!';
?>

Затем постепенно добавляйте блоки вашего кода, пока не столкнетесь с проблемой. Я бы предложил версию 2 этой страницы...

<?php
    print_r($_POST);
?>

Так как это позволит вам проверить, что возвращается в форме сообщения.

Если все вышеперечисленное не работает, пожалуйста, предоставьте следующее...

1) Описание того, что делает ваша PHP-страница, или, возможно, пример кода. 2) Код JavaScript, который вызывает PHP-страницу.

0
ответ дан 9 December 2019 в 22:28
поделиться

Возможно, производственный сайт нарушает политику одинакового происхождения.

URL в браузере до третьего слэша должен точно совпадать с URL в вашем AJAX POST, иначе ограничения безопасности браузера для Javascript отклонят ответ. Сервер может увидеть запрос и ответить правильно, но браузер передаст пустую строку обратно вызову AJAX.

0
ответ дан 9 December 2019 в 22:28
поделиться

Я бы хотел бросить свои 2 цента, но он исходит из немного другого направления, и у вас могут быть или не быть прямые ресурсы для устранения неполадок, но об этом стоит подумать.

В общем, это ошибка PHP, и мы можем исключить проблемы на стороне клиента. Вдобавок ко всему, в моей повседневной работе (устранение неполадок в сети), если что-то работает, а затем останавливается, я сразу думаю, «что изменилось». Если вы ничего не добавляли к сценарию и у пользователя нет возможности повлиять на сценарий во время выполнения, я бы сразу начал думать: «Ой, что с инфраструктурой». Это особенно верно, если что-то работает локально, но не через Интернет.

Проверяли ли вы наличие плохой памяти на сервере или плохих сетевых адаптеров (если они плохие, это объясняет, почему один интерфейс работает, а другой нет). У вас есть к нему доступ или он размещен (может ли ваш хост проверять)?

Затем я бы начал думать, хорошо, с памятью сервера все в порядке, и это вряд ли связано с неисправным сетевым адаптером, иначе он будет периодически выходить из строя и в разных местах. Хотя все еще может быть нетворкинг. Есть ли устройство безопасности, которое может искажать пакеты в любом месте микса (NIDS / HIDS, WAF, прокси и т. Д.?). Вы видите какие-либо сетевые проблемы с пакетами (дубликаты, не в порядке, не фрагментировать и т. Д.).

Я буду честен, если бы кто-то позвонил мне на стол и описал мне ваши проблемы, первое, что я бы сказал, это «проверьте журналы IPS», примерно 85% это проблема.Ложные срабатывания могут сделать это, и все, что нужно, - это одно автоматическое обновление брандмауэра ...

Я надеюсь, что это поможет.

0
ответ дан 9 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: