2012-03-28 31 views
0

所以我有這個javascript函數,它發送一個ajax請求來從php變量中獲取一個值。將獲取的數據從ajax調用返回到另一個函數

函數看起來像這樣:

function get_cart_limit() { 
$.ajax({ 
    url: '/w2w/ajax/', 
    data: { 
     _action: 'get_cart_limit' 
    }, 
    type: 'post', 
    timeout: 10000, 
    success: function(output) { 
     var cartlimit = output; 
        alert(cartlimit); // this gives me the correct value. 
     return cartlimit; 
    }, 
    error: function(output){ 

    } 
}); 

}

當我從另一個調用函數這個函數是這樣的:

var cartlimit = get_cart_limit(); 

我的變量 「cartlimit」 是不確定的。

所以ajax調用正在工作,但爲什麼我不能將值返回到另一個函數? 對我來說早,我的大腦不能正常工作! :)

乾杯!

+0

由於ajax調用是異步的,所以您的變量未定義是正常的。 – denolk 2012-03-28 06:51:49

回答

1

如果更改cartlimit變量的範圍和禁用異步請求,get_cart_limit()應返回正確的值

function get_cart_limit() { 
var cartlimit; 
$.ajax({ 
    url: '/w2w/ajax/', 
    data: { 
     _action: 'get_cart_limit' 
    }, 
    type: 'post', 
    timeout: 10000, 
    async: false, 
    success: function(output) { 
     cartlimit = output; 

    }, 
    error: function(output){ 
    } 
}); 
return cartlimit; 
} 
+0

謝謝!這工作就像一個魅力!乾杯! – ninja 2012-03-28 07:06:23

+1

是的,這是有效的,但你會鎖定瀏覽器,直到請求完成。 – NeXuS 2012-03-28 10:16:50

0

聲明這個cartlimit具有全局範圍。 Decalre此功能啓動

var cartlimit; 
function get_cart_limit() { 
$.ajax({ 
................... 

之前在這裏您cartlimit將被宣佈後,才AJAX功能獲得成功。

但是在執行此成功之前可能會執行其他腳本。所以它會得到不確定的

0

你可以在你的輸出數據傳遞給指定的函數這樣

var cartlimit = get_cart_limit(output); 
1

變量cart_limit僅在AJAX請求成功終止後纔會設置。

爲什麼?

  1. 的AJAX調用是異步的,即get_cart_limit()結束實際的答案來自服務器
  2. 您指定爲success: function(output) { /*...*/ }被調用時,答案來自於服務器返回的匿名函數回來。

如果您在執行成功函數之前調用另一個試圖訪問cart_limit的函數,將會得到一個未定義的值。

即使您在success函數中執行return語句,它與get_cart_limit()函數不同,它會在不同的時間執行,因此您無法獲得將返回值分配給任何變量的所需效果。

一個解決這個問題是有需要cart_limit由匿名成功函數被調用的函數。

function get_cart_limit() { 
    $.ajax({ 
     url: '/w2w/ajax/', 
     data: { 
      _action: 'get_cart_limit' 
     }, 
     type: 'post', 
     timeout: 10000, 
     success: function(output) { 
      var cartlimit = output; 
      alert(cartlimit); // this gives me the correct value.     
      function_that_needs_cart_limit(); 
     }, 
     error: function(output){ 
     } 
    }); 
} 
相關問題