0

AJAX関数から呼び出される関数がありますjavascript。このようなもの:

(CODE1)
//javascript function calling AJAX.
var function check(){
  var status = chkHoliday(date,'Date Chosen');
  alert('called');
  return status;
}

//AJAX function
function chkHoliday(date,str){
    var flag = true;
    $.ajax({ 
        type: "GET",
        url: someurl,
        async: false,          //if commented, the alert() from the caller function is called before completion of this function.
        dataType: "json",
        success: {
            flag = false;
        }
    });
    return flag;
}

それはうまくいきます。唯一の問題は、 async が に設定されているためfalse、Web ページがしばらくハングアップするものの、その後さらに処理を続行することです。

これを避けるために、コールバック関数について何か読んだので、これを試してみました: (コード 2)

//javascript function calling AJAX.
var function check(){
    var status;
    chkHoliday(date,'Date Chosen',function(retVal){
        status = retVal;
    });
    if(status != null){
       alert(status);
       return status;
    }
    else{
       alert(true);
       return true;
    }
}

//AJAX function
function chkHoliday(date,str,callback){
    var flag = true;
    $.ajax({ 
        type: "GET",
        url: someurl,
        //async: false,          //if commented, the alert() from the caller function is called before completion of this function.
        dataType: "json",
        success: {
            flag = false;
            callback(flag);
        }
    });
    //return flag;
}

AJAXこれは機能しましたが、関数が「未定義」と述べて完了する前にアラートが再度呼び出されました。何が間違っているのかわかりません。

AJAX関数が完全に実行されるまで待機してから、呼び出し元の関数に戻り、プロセスを停止して (つまり、非同期を使用して) 呼び出し元の関数で次のステートメントを実行する必要があります。AJAXまた、呼び出し元の関数から返された値に簡単にアクセスできるようにしたいと考えています。

4

3 に答える 3

0

アラートをコールバック関数内に配置します。そうしないと、成功またはエラーに関係なく、アラートが同時に機能します。

于 2013-10-01T04:17:04.563 に答える