2014-10-30 97 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 
    }); 
}