0

stackoverflow でさまざまな例を読んだ後、私はこの関数を書きました:

function showGetResult(crossDomainUrl) {
    $.ajax({
        url: crossDomainUrl,
        type : 'GET',
        crossDomain: true,
        success: function (data) {
            debug(data);
            return data;
        }
    });
}

これを使用して呼び出しました

alert(showGetResult(crossDomainUrl));

しかし、私が得るのは「undefined」だけです。これは、コンテンツ スクリプト内の Web ブラウザ拡張機能で使用されています。

4

2 に答える 2

0

これは、Ajax リクエストが非同期で実行されるためです。はreturn data何もしません。次のように変更できます (スクリプトをダウンロードできるようにするためのコメントの要求を反映するように更新されます)。

function showGetResult(crossDomainUrl) {
    return $.ajax({
        url: crossDomainUrl,
        type : 'GET',
        dataType: 'script',
        crossDomain: true
     });
}

showGetResult('http://code.jquery.com/ui/1.10.3/jquery-ui.js')
    .done(function(data) {
        alert("success: " + data);
    })
    .fail(function(jqXHR, textStatus, ex) {
        alert("failed: " + textStatus);
    });

呼び出しが実際にクロスドメインで機能するには、jsonp またはスクリプトを使用する必要があります。Same-origin ポリシーの詳細については、このwikiを参照してください。jsonp の使用の詳細については、この回答を参照してください。

上記のコードは、ダウンロードした jscript を dom に挿入して実行します。

于 2013-10-03T12:13:49.843 に答える
-1

$.ajax()クエリをセットアップし、すぐに戻るので、関数はリクエストが完了する前に戻ります。を使用して、クエリの完了時に呼び出す関数を指定しますsuccess

function showGetResult(crossDomainUrl) {
    $.ajax({
        url: crossDomainUrl,
        type : 'GET',
        crossDomain: true,
        success: showData
    });
}

function showData(data){
    debug(data);
    return data;
}
showGetResult(crossDomainUrl);

http://jsfiddle.net/5J66u/8/を参照してください- (jsonp を指定するように更新され、より適切な URL が表示されます)

于 2013-10-03T12:55:31.670 に答える