1

設定:

私は正常に動作している ajax-jsonp 呼び出しを行っています。これのコールバック関数は、変数「myVaraible」の値を変更します。呼び出しの直後に、「myVaraible」の値に作用する if-else ロジックがあります。

コードは次のとおりです。

    <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>

問題:

ajax 呼び出しは「保留中」のままで、制御は if-else ブロックに移動します (myVariable の古い/古い値で効果的に実行されます)。そして、ajax 呼び出しが完了します。つまり、2 つのalertボックスのうち、alert("after myfunction");最初に実行し、次にalert("inside jsonpCallbackFn");

ご覧のとおり、既に を設定していますがasync: false,、期待どおりに動作していないようです。誰が私が間違っているのか教えてもらえますか? また、シナリオ全体を適切に説明したかどうかもわかりません。さらに情報が必要な場合はお知らせください。

どうもありがとう。

4

2 に答える 2

3

$.ajaxドキュメントから:

クロスドメイン リクエストと dataType: "jsonp" リクエストは同期操作をサポートしていません

そのため、リクエストの結果に依存するものはすべてコールバックに入れる必要があります。

于 2012-05-24T23:54:20.607 に答える
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リクエストのように動作するように正規化するために、舞台裏でたくさんの魔法をかけているように見えるので、これは問題ないと思います。それ以外の場合はお知らせください。

于 2012-05-25T00:30:21.900 に答える