JS, как сделать мой массив видимым другими функциями - PullRequest
0 голосов
/ 13 декабря 2010

мое первое предупреждение показывает список элементов, а второе - нет. Я никогда ничего не делал в ajax / js, поэтому я не знаю, как вернуть мой массив, чтобы он был виден другим функциям.

var mycarousel_itemList = [];

$(document).ready(function () {
    $.ajax({
        type: "GET",
        url: "xml/images.xml",
        dataType: "xml",
        success: function (xml) {

            $(xml).find('image').each(function () {
                var id = $(this).attr('id');
                var url = $(this).find('url').text();
                mycarousel_itemList.push('{url:"' + url + '",' + 'id:"' + id + '"}');

                alert(mycarousel_itemList);
            });
        }
    });
    alert(mycarousel_itemList);
});

Вот так выглядит мой xml

<images>
  <image id="1">
    <title>item</title>
    <url>images/image.gif</url>
    <desc>description of an item</desc>
  </image>
  <image id="2">
     <title>anotheritem</title>
    <url>images/images.gif</url>
    <desc>description of an item</desc>
  </image>
</images>

Ответы [ 2 ]

0 голосов
/ 14 декабря 2010

Чтобы ответить на прямой вопрос: невозможно заполнить массив при вызове второго предупреждения, потому что к тому времени вызов AJAX не успел завершиться.

Какая функция точно нуждается в этом массиве?

Просто вызовите его из метода success после заполнения массива, и он будет отлично работать.

0 голосов
/ 14 декабря 2010

Массив mycarousel_itemList не объявлен внутри функции и поэтому является глобальным. Вы должны быть в состоянии получить доступ к массиву в функции success.

В вашем конкретном примере что-то скрыто (например, функция success не срабатывает, потому что сервер не отвечает).

Если я скопирую и вставлю ваш код и просто заменил серверный компонент службой JSONP (просто для того, чтобы я мог выполнять AJAX для разных доменов), у меня нет проблем с доступом к массиву:

var mycarousel_itemList = [];

$(document).ready(function () {
    var url = "http://github.com/api/v2/json/user/show/yui";
    $.ajax({
        type: "GET",
        url: url,
        dataType: "jsonp",
        success: function (data) {
                mycarousel_itemList.push(data.user.company + ' - ' + data.user.blog);
                alert(mycarousel_itemList[0]);
        }
    });
});

Вы можете проверить это здесь .

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