2011-07-18 47 views
2

我創建一個簡單的Ajax調用,這從我的數據庫使用JSON檢索數據,是這樣的:得到一個合法的陣列從AJAX和jQuery的調用

$.ajax({ 
    type: "..", 
    url: "..", 
    data: .., 
    success:function(data){ 
     var arrayData = jQuery.parseJSON(data); 
    } 
}); 

然後我得到一個數組arrayData,但我怎麼能使用它的'成功功能'?

回答

3

simshaun回答了您的直接問題,但我懷疑您也可能對AJAX調用的異步性質有疑問,即arrayData將爲undefined,直到從服務器重新創建響應並調用成功函數爲止。

無論你想在arrayData之後做什麼,調用成功函數之後都需要從成功函數中調用。例如

var arrayData; 

$.ajax({ 
    type: "..", 
    url: "..", 
    data: .., 
    success:function(data){ 
     arrayData = jQuery.parseJSON(data); 
     doSomethingElse(); 
    } 
}); 

function doSomethingElse() { 
    /* do something else here with arrayData */ 
    arrayData.doSomething(); 
} 

現在,在這一點上,我們實際上可以去除arrayData

$.ajax({ 
    type: "..", 
    url: "..", 
    data: .., 
    success:function(data){ 
     doSomethingElse(jQuery.parseJSON(data)); 
    } 
}); 

function doSomethingElse(data) { 
    /* do something else here with the returned data */ 
    data.doSomething(); 
} 

事實上,我們可以走得更遠。所有分配給成功財產匿名函數是真正做的是調用doSomethingElse這樣我們就可以擺脫這一點,只需調用doSomethingElse直接

$.ajax({ 
    type: "..", 
    url: "..", 
    data: .., 
    success: doSomethingElse 
}); 

function doSomethingElse(data) { 
    /* do something else here with the returned data */ 
    var arrayData = jQuery.parseJSON(data); 

} 

這是清潔/更清晰?

+0

是的,謝謝! – Luis

4

你必須在ajax調用之前聲明arrayData var。

var arrayData; 

$.ajax({ 
    type: "..", 
    url: "..", 
    data: .., 
    success:function(data){ 
     arrayData = jQuery.parseJSON(data); 
    } 
}); 

我建議你閱讀一些關於javascript中的變量作用域。

+0

nooooooooooooo! +1:] –

2
var arrayData; 
$.ajax({ 
    type: "..", 
    url: "..", 
    data: .., 
    success:function(data){ 
     arrayData = jQuery.parseJSON(data); 
    } 
}); 
0

其他兩個答案,表示你要申報成功函數外部陣列。這是因爲函數(){創建一個內部作用域。

0

我用:

$.getJSON("sections/view_numbers_update.php?JsonUpdatedFrom=" + intLastUpdate, function(data) { 
$.each(data, function(index, objNumber) { 
    $('#tr_' + objNumber.intID).find("td").eq(3).html(objNumber.datLastCalled); 
    $('#tr_' + objNumber.intID).find("td").eq(4).html(objNumber.strStatus); 
    $('#tr_' + objNumber.intID).find("td").eq(5).html(objNumber.intDuration); 
    $('#tr_' + objNumber.intID).find("td").eq(6).html(objNumber.blnWasHuman); 
}); 
}); 

(對於表<tr id="tr_<?php echo $arrRecord["intID"] ?>">等)