Получить допустимый массив из вызова ajax & jquery - PullRequest
2 голосов
/ 19 июля 2011

Я создаю простой вызов ajax, который извлекает данные из моей базы данных с помощью json, что-то вроде:

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

Затем я получаю массив в arrayData, но как я могу использовать его из «функции успеха»?

Ответы [ 5 ]

4 голосов
/ 19 июля 2011

Вы должны объявить переменную arrayData перед вызовом ajax.

var arrayData;

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

Я рекомендую вам прочитать некоторые из них по области видимости переменных в javascript.

3 голосов
/ 19 июля 2011

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

На самом деле мы можем пойти еще дальше.Вся анонимная функция, которая присваивается свойству 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 голосов
/ 19 июля 2011
var arrayData;
$.ajax({
    type: "..",
    url: "..",
    data: ..,
    success:function(data){
        arrayData = jQuery.parseJSON(data);
    }
});
0 голосов
/ 10 января 2013

Я использовал:

$.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"] ?>"> и т. Д.)

0 голосов
/ 19 июля 2011

Как показывают два других ответа, вы должны объявить массив вне функции success. Причина этого в том, что функция () {создает внутреннюю область видимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...