如何从ajax函数获取返回值到变量?

时间:2014-10-30 09:32:15

标签: jquery ajax

我正在调用一个函数,我希望得到一些价值。但我没有任何价值。

如何使用返回值?

$(function () {
    $(".datepicker").datepicker({
        beforeShowDay: function (date) {
            var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
            return [array.indexOf(string) == -1]
            console.log(array.indexOf(string) == -1);
        }
    });
});
var BDate = gateDateBooking(); // Calliing a function 
var BookingDate = Bdate; // But i did't get any responce here
function gateDateBooking(){
    $.ajax({
        url: "localhost/CodeIgniter_2.2.0/index.php/admin/GetBookingDate",
        type: "POST",
        dataType: "text",
        cache: false,
        success: function (data) {
           alert(data);
          return data; // return responce 
       }
   });
 }

4 个答案:

答案 0 :(得分:6)

您无法从异步回调中间返回值。它会将值返回给success调用者(在ajax代码中)。

虽然它似乎“有效”,但从不考虑使用ajax async: false选项作为

  • a)会造成比值得多的麻烦
  • b)它将停止浏览器和
  • c)这不是使用异步事件的正确方法

相反,你可以使用传递给gateDateBooking函数的回调,或者使用jQuery promises(或者只是将代码放在success回调中 - 但这不灵活):

回调版本如下所示:

gateDateBooking(function(data){
    var BookingDate = data; // Do something with the data when it is ready
});

function gateDateBooking(cb){
    $.ajax({
        url: "localhost/CodeIgniter_2.2.0/index.php/admin/GetBookingDate",
        type: "POST",
        dataType: "text",
        cache: false,
        success: function(data){
            // call the callback passed
            cb(data);
        }
   });
}

这是使用$.ajax返回的Ajax承诺的示例。

gateDateBooking().done(function(data){
    var BookingDate = data; // Do something with the data when it is ready
});

function gateDateBooking(){
    // return the ajax promise
    return $.ajax({
        url: "localhost/CodeIgniter_2.2.0/index.php/admin/GetBookingDate",
        type: "POST",
        dataType: "text",
        cache: false
   });
}

答案 1 :(得分:0)

创建一个全局变量然后在你的成功中做

success: function(data) {
      global_var =data;
},

您可以使用deffered显示

答案 2 :(得分:0)

成功函数从$ .ajax函数内部的某处调用,而$ .ajax由于它的异步性质(默认情况下)而不返回它。您可以使用全局变量,将返回的值放在成功处理函数中。

alert(data);
return data;

我认为警报显示正确的事情?只需删除"返回数据;"并用例如替换它。 " BookingDate = data;"

答案 3 :(得分:0)

您正在使用的Ajax调用是一个匿名函数,它具有自己的范围,并且返回返回到"无处"。为了从异步方法返回值,您应该使用回调:

function gateDateBooking(callBack){
$.ajax({
    url: "localhost/CodeIgniter_2.2.0/index.php/admin/GetBookingDate",
    type: "POST",
    dataType: "text",
    cache: false,
    success: function (data) {
      callBack(data);
    }
  });
}

然后使用这样的调用:

gateDateBooking(function(data){
    var BDate = data;
    var BookingDate = Bdate;
    //continue your function here, inside of the callback
});

这可确保从Ajax调用的响应中设置值。如评论中所述,不推荐使用同步调用。

还可以选择使用promises而不是回调。您可以在以下链接中阅读以下内容:

https://www.w3schools.com/jquery/jquery_callback.asp

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise