Ajax синхронный вызов с таймаутом - PullRequest
4 голосов
/ 03 февраля 2010

Впервые в ajax, поэтому задаю очень простой вопрос.

- Нет ли способа сделать синхронный вызов ajax (async: false) с установленным тайм-аутом .?

http://www.ajaxtoolbox.com/request/

Тайм-аут отлично работает с асинхронным вызовом, хотя в моем приложении, но для одного конкретного сценария мне нужен синхронный вызов (на самом деле javascript должен ждать до тех пор, пока он не услышит от сервера), и это также работает нормально. Но мне нужно разобраться со сценарием, где сервер может занять много времени и может быть вызван тайм-аут ajax.

Есть ли еще какая-то стандартная документация для ajax, на которую я мог бы сослаться?

Спасибо

Ответы [ 2 ]

1 голос
/ 15 марта 2016

Как правило, во время синхронного запроса AJAX браузер блокируется, и при блокировке браузера не может быть выполнен JavaScript. Из-за этого jQuery не может прервать запрос ajax после установленного времени ожидания, потому что jQuery - это javascript, и javascript не может быть выполнен, пока браузер заблокирован. Это основной недостаток синхронного AJAX.

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

$.ajax({
    url : 'webservices.php',
    timeout: 200,
    dataType : 'json',
    data : {
        'cmd' : 'ping',
    },
    success : function(data, textStatus) {
        $.ajax({
            url : 'webservices.php',
            async: false,
            dataType : 'json',
            data : {
                'cmd' : 'feedback',
                'data' : data,
                'userinfo' : window.dsuser
            },
            success : function(data, textStatus) {
                // success!
                Status("Thanks for the feedback, "
                    + window.dsuser.user + "!");
            }
        });
    },
    error : function(jqhdr, textStatus,
                     errorThrown) {
        Status("There was trouble sending your feedback. Please try again later");
    }
});
0 голосов
/ 03 февраля 2010

Я не верю, что можно установить таймаут для синхронного вызова. Когда вы устанавливаете «async: false», я полагаю, что браузер на самом деле блокируется, ожидая ответа. Вы должны использовать синхронный запрос только в случае крайней необходимости (из-за блокировки браузера).

...