2011-07-18 74 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"] ?>">等)