Продвижение к Массиву в рамках jQuery каждый цикл

Какую версию Java Вы используете? Были ошибки в раннем Sun 1.4.2, но он работал в течение долгого долгого времени.
BTW, как Вы сообщите новости своему руководителю группы? Действительно ли Вы - руководитель группы?

6
задан cmal 27 September 2009 в 19:56
поделиться

3 ответа

Правильный вариант:

var splashArray = new Array();

// Load the Splash XML file and assign each image within to an array
$.get('splash.xml', function(xml) {
        $('image', xml).each(function (i) {
                splashArray.push($(this).attr("src"));
        });
        alert(splashArray[1]);
});

В вашем варианте кода alert (splashArray [1]); выполняется до того, как ajax получит результат xml, поэтому splashArray был пуст, когда вы пытались предупредить элемент с индексом 1. Ваш код работает хорошо только для синхронного режима, когда поток ожидает ответа сервера. В асинхронном режиме вы должны использовать функцию обратного вызова.

Вариант с обратным вызовом:

var splashArray = new Array();

// Load the Splash XML file and assign each image within to an array
$.get('splash.xml', function(xml) {
        $('image', xml).each(function (i) {
                splashArray.push($(this).attr("src"));
        });
        work_with_splash();
});

function work_with_splash () {
    alert(splashArray[1]);
}

Или еще один шаблон (псевдокод):

function process(ajax_is_done) {
    if (!ajax_is_done) {
        ajax(function (result) {
            import_result(result);
            process(true);
        })
    }
}
process();
13
ответ дан 8 December 2019 в 16:05
поделиться

Если вы не хотите использовать стандартный обратный вызов, другой вариант - вызвать событие jQuery.

0
ответ дан 8 December 2019 в 16:05
поделиться

Вы получаете предупреждение перед заполнением массива. Вы должны понимать, что XHR / Ajax является асинхронным (в отличие от синхронного), поэтому предупреждение не будет всегда запускаться после функции обратного вызова, потому что для выполнения фактического HTTP-запроса для получения xml потребуется несколько секунд. , предупреждение внутри обратного вызова гарантирует, что он будет заполнен после того, как материал XHR будет выполнен.

Работает:

var splashArray = [];

function fn() {
    alert(splashArray[1]);
}

$.get('splash.xml', function(xml) {
        $('image', xml).each(function (i) {
                splashArray.push($(this).attr("src"));
        });
        fn();
});

Не работает:

var splashArray = [];

$.get('splash.xml', function(xml) {
        $('image', xml).each(function (i) {
                splashArray.push($(this).attr("src"));
        });
        // this will populate the array almost always AFTER the alert below.
});


alert(splashArray[1]); // this will almost ALWAYS alert BEFORE the callback function is done
2
ответ дан 8 December 2019 в 16:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: