2011-02-13 199 views
17

如何從jquery ajax返回值「pinNumber」,以便我可以將它追加到ajax之外。這裏是我的代碼jQuery ajax返回值

 
var x = pinLast + 1; 
    for(i=x;i<=pinMany;i++) { 
     var i = x++; 
     var cardNumber = i.toPrecision(8).split('.').reverse().join(''); 
     var pinNumber = ''; 

     jQuery.ajax({ 
      type: "POST", 
      url: "data.php", 
      data: "request_type=generator", 
      async: false, 
      success: function(msg){ 
       var pinNumber = msg; 
       return pinNumber; 
       //pin number should return 
      } 
     }); 

     jQuery('.pin_generated_table').append(cardNumber+' = '+pinNumber+'
'); // the variable pinNumber should be able to go here }

請問我,如果你不明白.. ^^感謝

+3

訪問此另一個「我怎麼從返回數據異步功能「問題。這種問題經常被問到。投票結束。 – 2011-02-13 07:22:30

+0

你怎麼敢問這個問題!我投票把這個人從地球上移走。 – 2015-08-18 20:43:46

回答

15

AJAX在默認情況下是異步的,你不能沒有進行同步調用返回從回調的值,這你幾乎肯定不想這樣做。

您應該爲success:處理程序提供真正的回調函數,並將程序邏輯放在那裏。

+0

哦,非常感謝..我已經有了主意.. :)通過把我的變量放在ajax裏面然後將它追加到裏面。 – Jorge 2011-02-13 07:27:11

+0

我真的不需要在SYNC AJAX中進行回調。 – 2011-02-13 11:04:53

+4

同步Ajax是一個矛盾。和同步XHR很爛。 – Quentin 2011-02-13 11:35:05

4

它與variable scope有關。您創建的本地變量pinNumber無法在其包裝功能外訪問。

也許在全球範圍內聲明pinNumber,或者如果它能做到這一點,只需將您的.append()粘貼到您的成功功能中即可。

+3

它與變量範圍無關; `.append`在成功回調之前執行。 – meagar 2011-02-13 07:23:41

5
var pinNumber = $.ajax({ 
    type: "POST", 
    url: "data.php", 
    data: "request_type=generator", 
    async: false 
}).responseText; 
jQuery('.pin_generated_table').append(cardNumber+' = '+pinNumber+' '); 
-2

這裏是簡單的解決方案。

//---------------------------Ajax class ------------------------------// 
    function AjaxUtil() 
    { 
      this.postAjax = function(Data,url,callback) 
      { 
       $.ajax({ 
       url: url, 
       async: true,  //must be syncronous request! or not return ajax results 
       type: 'POST', 
       data: Data, 
       dataType: 'json', 
       success: function(json) 
       { 
        callback(json); 
       } 
       }); 
      }//--end postAjax 
    } 
    //--------------------------------End class--------------------// 
    var ajaxutil = new AjaxUtil(); 

    function callback(response) 
    { 
      alert(response); //response data from ajax call 
    } 

    var data={}; 
    data.yourdata = 'anydata'; 
    var url = 'data.php'; 

    ajaxutil.postAJax(data,url,callback); 
3
var _successEvent = function(response){ 
    $('.pin_generated_table').append(cardNumber + ' = ' + response); 
}; 

$.ajax({ 
    type: "POST", 
    url: "data.php", 
    data: "request_type=generator" 
}).done(_successEvent); 
1

你可以用這個例子:

window.variable = 'some data';

這讓你變全球,你可以從任何地方