我正在调用一个函数,我希望得到一些价值。但我没有任何价值。
如何使用返回值?
$(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 :(得分:6)
您无法从异步回调中间返回值。它会将值返回给success
调用者(在ajax
代码中)。
虽然它似乎“有效”,但从不考虑使用ajax async: false
选项作为
相反,你可以使用传递给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)
答案 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