JQUERY AJAX与CALLBACK

时间:2013-09-30 16:08:26

标签: javascript ajax jquery

我有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;
}

效果很好。唯一的问题是,由于异步它设置为false,网页排序暂停一段时间,然后继续进一步。

为了避免这种情况,我读了一些关于回调函数的内容,所以我尝试了这个: (代码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函数应该等到它完全执行然后返回到调用函数并在调用函数中运行下一个语句并暂停该过程(即使用async)。此外,我希望我的调用函数可以轻松访问AJAX返回的值。

3 个答案:

答案 0 :(得分:0)

将警报置于回调函数中:

chkHoliday(date,'Date Chosen',function(retVal){
        status = retVal;
       if(status != null){
           alert(status);
       }
    else{
       alert(true);
    }
});

但请注意,您不能再使用return语句,因为它是异步的。

答案 1 :(得分:0)

由于AJAX是异步的,因此将它放在函数中并返回一个值是一个问题。为了解决这个问题,推迟了承诺。这将向调用者承诺ajax结果。它略有不同。这是一个例子。对我来说就像一个魅力。 当然,您需要根据自己的需要进行调整,但您真正需要做的就是创建数据对象。

var data = {}

function chkHoliday(data) {
    var deferred = $.ajax({
        method: "post",
        url: ajaxURL,
        dataType: "json",
        data: data
    });
    return deferred.promise();
}

chkHoliday(data).done(function (response) {
    console.log(response);
}

使用

从php文件返回
echo json_encode(array("success"=>"hello"));

答案 2 :(得分:0)

将警报放入回调中  功能。或者警告会在成功或错误的情况下同时发挥作用。