Вопрос по jquery, ajax – вызов async-ajax не работает должным образом

1

Setup:

Я делаю вызов ajax-jsonp, который работает нормально. Функция обратного вызова этого изменяет значение переменной «myVaraible». Сразу после вызова существует некоторая логика if-else, которая работает со значением «myVaraible».

Вот код:

    <script>
        function myfunction() {
            $.ajax({
                url: myURL,
                dataType: "jsonp",
                jsonp : "jsonp",
                async: false,
                jsonpCallback: "jsonpCallbackFn"
            });
        }

        function jsonpCallbackFn(mydata) { 
            alert("inside jsonpCallbackFn");
            if(something) {
                // change value of a variable "myVariable";
            }
        }

        $(document).ready(function() {
            $("#preview_button").mouseover(function() {
                myfunction();

                alert("after myfunction");
                // do some if-else logic based upon the value of myVariable which is updated by the call to myfunction()
            });
        });
    </script>

The Problem:

Вызов ajax остается «ожидающим», элемент управления перемещается в блок if-else (эффективно выполняющийся при старом / устаревшем значении myVariable). И тогда вызов ajax завершается. Короче из 2alert ящики,alert("after myfunction"); выполняется сначала, а затемalert("inside jsonpCallbackFn");

Как видите, я уже установилasync: false,, но похоже, что это не работает, как ожидалось. Может кто-нибудь сказать мне, что я делаю не так? Кроме того, я не уверен, правильно ли я объяснил весь сценарий, пожалуйста, дайте мне знать, если потребуется дополнительная информация.

Большое спасибо.

RTFM -api.jquery.com/jQuery.ajax iambriansreed

Ваш Ответ

2   ответа
0

Я считаю, что нет причин, по которым вы не можете

    function myfunction() {
        return $.ajax({
            url: myURL,
            dataType: "jsonp",
            jsonp : "jsonp",
            jsonpCallback: "jsonpCallbackFn"
        });
    }

а потом

...
$("#preview_button").mouseover(function() {
    myfunction().done(function(){
        alert("after myfunction");
    });
});

Похоже, что jQuery скрывает за кулисами кучу магии, чтобы нормализовать запросы jsonp, действующие подобно запросам jquery ajax, так что я думаю, что это нормально. Дай мне знать иначе.

3

От$ .ajax документация:

Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation

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

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