46

jquery api ページ http://api.jquery.com/jQuery.getScript/から

成功のコールバック

コールバックは、スクリプトが読み込まれると発生しますが、必ずしも実行されるとは限りません。

$.getScript("test.js", function() {
    foo();
});

foo()関数が test.js に依存している場合、正常に実行できません。

google map api でも似たようなことがありましたが、その場合は ajax スクリプトの URL でコールバック関数を指定できます。しかし、一般的に ajax スクリプトがコールバックを実行するまで待機する明確な方法はありますか?

4

8 に答える 8

3
$.getScript( "ajaxFile/myjs.js" )
.done(function( s, Status ) {
    console.warn( Status );
})
.fail(function( jqxhr, settings, exception ) {
    console.warn( "Something went wrong"+exception );
});
于 2014-07-06T09:59:37.117 に答える
3

あなたはajaxを使うことができます

jQuery.ajax({
        async:false,
        type:'GET',
        url:script,
        data:null,
        success:callback,
        dataType:'script'
    });

スクリプトをロードして実行したいので、非同期は false です。その後、成功したコールバックで関数 foo() を呼び出すことができます

于 2013-01-28T15:37:45.770 に答える
2

私は今日同じ問題に直面していて、約束とインターバルタイマーに基づいた解決策を思いつきました:

$.getScript("test.js", function() {
    var $def = $.Deferred();
    if (typeof foo === 'undefined') { // "foo" isn't available
        var attempts = 0;
        // create an interval
        // that will check each 100ms if the "foo" function
        // was loaded
        var interval = setInterval(function() {
            if (typeof foo !== 'undefined') { // loaded
                window.clearInterval(interval);
                $def.resolve();
            }
            // after X unsuccessfull attempts, abort the operation
            else if (attempts >= 100) {
                window.clearInterval(interval);
                $def.reject('Something went wrong');
            }

            attempts++;
        }, 100);
    }
    else { // "foo" is available
        $def.resolve();
    }
    return $def.promise();
}).then(function() {
    // at this point "foo()" is definitely available.
}).fail(function() {
    // deal with the failure
});

fooアイデアは、まだ存在しない変数(質問の例の関数)を公開する特定のスクリプトをロードすることです。そのため、スクリプトがロードされた後、getScriptこの変数が存在するかどうかを確認し、そうでない場合は間隔を作成します変数が使用可能かどうかを継続的にチェックし、この条件が満たされた場合にのみ、promise を解決します。

于 2016-08-18T17:32:44.653 に答える
0

残念ながら、ソリューションには依存関係のポーリングが必要です。または、AMD などの定義済みのコールバックでスクリプトをラップする必要があります。

于 2016-07-13T13:32:18.913 に答える
-1

$getScript は次のように使用します

$.getScript( "js/jquery.raty.min.js" )
    .done(function( script, textStatus ) {
          console.log( textStatus );
         }
          });

これは私にとってはうまくいっています

于 2014-04-08T07:42:20.173 に答える