JQuery $ .ajax вызывает метод успеха по таймауту, а не по ошибке, запущенной в Safari - PullRequest
2 голосов
/ 31 августа 2010

Я заметил странное поведение jQuery в Safari.После настройки вызова следующим образом:

$.ajax( {
    'url' : url,
    'dataType' : 'json',
    data : reqdata,
    timeout: 20000, //10 secs of timeout 
    success : function(data, textStatus, XMLHttpRequest) {
        console.log("success");
        if ((data === null) || (data.length == 0)) {
            ts.doAction( {
                'actionName' : 'timeout',
                'request' : {
                    'reqdata' : reqdata,
                    'actionName' : actionName,
                    'url' : url
                },
                'controller' : ts
            });
        }

        ts.doAction( {
            'actionName' : actionName,
            'data' : data
        });
    },
    error : function(XMLHttpRequest, textStatus, errorThrown) {
        console.log("error: " + textStatus);

        if (textStatus == "timeout") {
            ts.doAction( {
                'actionName' : 'networkFailureError',
                'request' : {
                    'reqdata' : reqdata,
                    'actionName' : actionName,
                    'url' : url
                },
                'controller' : ts
            });
        } else {
            ts.doAction( {
                'actionName' : 'serverError',
                'request' : {
                    'reqdata' : reqdata,
                    'actionName' : actionName,
                    'url' : url
                },
                'controller' : ts
            });
        }
    }
});

Если время ожидания истекло (я выключаю локальный веб-сервер), будет вызван метод «success»!Более того, в параметре textStatus есть строка с «success» !!!Обработчик ошибок даже не вызывается .... (Как вы можете заметить, единственный способ, которым я должен был сообщить о проблеме, - это проверить параметр данных, если он имеет нулевое значение или длину 0 ... Почему такое поведение? Как можноЯ избегаю этого?

Ответы [ 2 ]

1 голос
/ 31 марта 2011

У меня такая же проблема.

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

0 голосов
/ 31 августа 2010

Похоже, что ваш запрос кэшируется.

Попробуйте $.ajax вызов с установленной опцией cache: false.Согласно API документам :

Если установлено значение false, это приведет к тому, что запрашиваемые страницы не будут кэшироваться браузером.

Выможет также захотеть проверить, кэшируется ли ответ на ваш запрос, просмотрев запрос / ответ с помощью Firebug, Fiddler или какого-либо другого инструмента мониторинга веб-запросов.

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