2014-10-30 138 views
0

我正在调用一个函数,我想返回一些值。但我没有得到任何价值。如何从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 
     } 
    }); 
} 
+0

您不能从中间返回异步回调的值。该将返回到“成功”调用者。 – 2014-10-30 09:35:03

+0

您可以通过设置async false来完成它,但不是首选。只有在成功回调函数内执行(你想要的)才更好。 – Prateek 2014-10-30 09:35:44

+0

因此,没有其他选项可以访问此返回值> 使用此值的其他一些选项 – Secure 2014-10-30 09:41:14

回答

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调用。正如评论中提到的那样,同步调用已被弃用。

还有使用promise而不是回调的选项。你可以阅读无论是在下面的链接:

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

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

+1

从不建议'aysnc:false'作为解决方案。它比解决问题更麻烦。始终使用异步模式(使用回调或承诺)。 – 2014-10-30 09:52:11

+0

其工作..非常感谢你.. – Secure 2014-10-30 10:02:14

+0

很高兴我能帮助..如果你有时间检查TheBlueAussie的解决方案。这是非常好的.. – Dropout 2014-10-30 10:03:11

0

使全局变量,然后在你的成功做

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

可以使用deffered显示它,然后

+0

向未经解释的新手介绍'deferred'并没有帮助。最好你提供一个适当的例子。 – 2014-10-30 09:44:00

0

成功函数是从某处$就函数中调用和$ .ajax由于它的异步性质(默认)而不会返回它。你可以使用一个全局变量,你可以在你的成功处理函数中放入返回的值。

alert(data); 
return data; 

我想警报显示正确的东西?只要删除“返回数据”;并用例如。 “BookingDate = data;”

+0

不好意思问这个问题,但是我怎样才能让全局变量的数据 – Secure 2014-10-30 09:48:04

6

不能从中间的异步回调返回值。它会将该值返回给success调用者(位于ajax代码中)。

虽然似乎“工作”,你应该永远考虑使用AJAX async: false选项,

  • 一个),它会造成更多的麻烦比它的价值
  • 二)会否拖延浏览器和
  • c)这只是不正确的方式来处理异步事件

相反,你既可以使用传递给gateDateBooking功能的回调,或使用jQuery的承诺(或只是把你的代码在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 
    }); 
}