Какую версию Java Вы используете? Были ошибки в раннем Sun 1.4.2, но он работал в течение долгого долгого времени.
BTW, как Вы сообщите новости своему руководителю группы? Действительно ли Вы - руководитель группы?
Правильный вариант:
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();
Если вы не хотите использовать стандартный обратный вызов, другой вариант - вызвать событие jQuery.
Вы получаете предупреждение перед заполнением массива. Вы должны понимать, что 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