从ajax&获得一个合法的数组jquery电话

时间:2011-07-18 22:07:27

标签: javascript jquery ajax json

我创建了一个简单的ajax调用,它使用json从我的数据库中检索数据,如:

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

然后我得到一个数组到arrayData,但是如何从'成功函数'中使用它呢?

5 个答案:

答案 0 :(得分:4)

你必须在ajax调用之前声明arrayData var。

var arrayData;

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

我建议您在javascript中阅读一些关于变量范围的内容。

答案 1 :(得分:3)

simshaun已回答了您的直接问题,但我怀疑您可能对AJAX调用的异步性质有疑问,即arrayData将为undefined,直到响应从调用服务器和成功函数。

在调用成功函数后,无论你想用arrayData做什么,都需要在success函数中调用。例如

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();
}

事实上,我们可以走得更远。分配给success属性的所有匿名函数实际上都是调用doSomethingElse所以我们可以摆脱它并直接调用doSomethingElse

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

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

}

这更干净/更清晰吗?

答案 2 :(得分:2)

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

答案 3 :(得分:0)

由于其他两个答案表明你必须在成功函数之外声明数组。原因是因为function(){创建了一个内部范围。

答案 4 :(得分: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"] ?>">等表格。)