Ошибка в php-скрипте не обработана $ .ajax - PullRequest
1 голос
/ 23 декабря 2010

У меня есть этот код:

<script>
$.ajaxSetup({
 timeout:3000,
 success: function(){alert('True!!!');},
 error:function (){
                    alert('false');
                }
});
$.ajax({
 url:'test.php',
});
</script>

Мой 'test.php':

<?
sleep(8);
$124415;
?>

Так что есть ошибка синтаксического анализатора, но ajaxнемедленно вернуть "True", но если во второй строке есть комментарий, то он ждет 3 сек.и вернуть «ложь». Любые идеи? У меня есть код изменения test.php:

<? 
function shutdown() {
    header("HTTP/1.0 500 Internal Server Error");
ob_flush();
}
ob_start();
register_shutdown_function('shutdown');
spl_autoload_register('foo');// Fatal Error => Ajax false
//$112123123;//if turn on will be Parse Error => Ajax true
?>

Так что теперь ajax предупреждает меня о фатальной ошибке, но ошибка Parser не перехватывает. Кто-нибудь знает хорошее решение этой проблемы

Ответы [ 2 ]

6 голосов
/ 23 декабря 2010

Работает как задумано.

Если есть ошибка синтаксического анализатора, скрипт PHP завершится ошибкой и немедленно прекратит работу. Однако на стороне ajax это все еще успешно, потому что PHP все равно отправляет заголовок 200 OK.

(PHP отправит заголовок 500 для фатальных ошибок , только если error_reporting и display_errors отключены .)

Если нет ошибки синтаксического анализатора, сценарий будет спать в течение 8 секунд, достигнув тайм-аута в 3 секунды, что приведет к ошибке Ajax.

0 голосов
/ 23 декабря 2010

Это нормальное поведение: в первом случае ваш php-скрипт возвращает ошибку разбора php, и ajax получает это, так что твой аякс прошел нормально.

В следующем случае ваш php-скрипт будет работать дольше, чем может ожидать ajax, поэтому ваш ajax выдает ошибку.

Приветствия, Арман.

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