0

重複の可能性:
jQuery ajax の戻り値
関数からの AJAX 呼び出しからの応答を返す方法は?

私はジャバスクリプトを持っています。データベースからデータをロードします。データの読み込みに関して true または false を返したい。しかし、私はそれを返すことができませんでした。私のコードは以下を与えました:

function CheckISRC() {
     var url = "/TrackEdit/CheckISRC/" + $('#isrcid').val();
     var isrc = $('#isrcid').val();
     var result = false;
     $.get(url, {
         isrc: isrc
     }, function (data) {
         if (data == "true") {
             result = true;
         }
         else {
             result = false;
         }
     });
     return result;
 }

それは常に偽の結果をもたらします。この種の問題に直面した人はいますか?「よろしくお願いします」

4

3 に答える 3

0

関数を同期的に使用することが非常に重要な場合は、次のようにリファクタリングできます。

function CheckISRC() {
     var url = "/TrackEdit/CheckISRC/" + $('#isrcid').val();
     var isrc = $('#isrcid').val();
     var result = false;
     $.ajax({
        async: false,
        success: function (data) {
           if (data == "true") {
               result = true;
           }
           else {
               result = false;
           }
         },
         data: { isrc: isrc }
     });
     return result;
 }

@ManseUKasyncは jQuery 1.8 で廃止されたため、同期アプローチが必要な場合は古いバージョンを使用する必要があります。

于 2013-01-21T13:55:39.363 に答える
0

JQuery ajax 関数は非同期です。つまり、結果を false に初期化すると、結果は「return result;」の後に true または false に設定されます。ラインが走りました。

呼び出しを同期にすることはできますが、これは悪い方法と見なされます。多くの場合、コードをリファクタリングして、JQuery Ajax の非同期性を考慮したほうがよいでしょう。

たとえば、以前に持っていた場所は次のとおりです。

function myFunction() {
    //Code before
    var result = CheckISRC();
    //Code after using result
}

あなたは次のものを持つことができます:

function myFunction() {
    //Code before
    CheckISRC();
}
function myFunction_callback(result) {
    //Code after using result
}

myFunction_callbackajax コードの success オプションを次のように呼び出します。

function CheckISRC() {
     var url = "/TrackEdit/CheckISRC/" + $('#isrcid').val();
     var isrc = $('#isrcid').val();
     $.get(url, {
         isrc: isrc
     }, function (data) {
             myFunction_callback(data == "true");
     });
 }
于 2013-01-21T13:55:48.097 に答える
0

問題は、戻ったときにresult値がないことです。ajax がそのタスクを完了していないためです。いくつかのコールバック関数を作成し、ajax の結果がサーバーから返されたら、やりたいことを行います。

このようなもの:

function CheckISRC(Callback) {
    var url = "/TrackEdit/CheckISRC/" + $('#isrcid').val();
    var isrc = $('#isrcid').val();
    var result = false;
    $.get(url, {
        isrc: isrc
    }, function (data) {
        if (data == "true") {
            Callback(true);
        }
        else {
            Callback(false);
        }
    });
 }
 function YourCallback(result) {
     //...
 }
于 2013-01-21T13:56:53.587 に答える