Как создать массив объектов jquery

0

У меня есть объект города в моем проекте. Я хочу создать массив jquery с некоторыми городскими объектами. Я могу взять список городов из файла.ashx и создать единые городские объекты. Но я не мог подтолкнуть их к массиву. Вот мой код:

 var postDataCity = { funcName: "GetCities" };

        var cities = [];
        var city = {};

        $.ajax({
            type: "POST",
            contentType: "application/x-www-form-urlencoded; charset=utf-8",
            dataType: "json",
            url: "KurumInformation.ashx",
            data: postDataCity,
            async: true,
            success: function (msg) {
                $.each(msg, function (i, v) {
                    city.M_CityId = this.M_CityId ;
                    city.M_CityName= this.M_CityName;
                    cities.push(city);
                });
            },
            error: function (d) {
                alert('error :' + d);
            },
        });

        console.log(cities);

После этого я проверяю города, но есть ошибка, о которой я думаю, потому что я не вижу городов в консоли. Где моя ошибка?

  • 0
    Возможный дубликат Как вернуть ответ от вызова AJAX?
  • 0
    Он асинхронный , console.log выполняется до заполнения массива, так как работает ajax.
Теги:
arrays

3 ответа

2
Лучший ответ

Ваш код почти прекрасен, вы должны объявить city внутри цикла.

Также вам нужно просто переместить console.log после нажатия, чтобы увидеть результаты:

success: function (msg) {
    $.each(msg, function (i, v) {
        var city = {};   //Move declaration here
        city.M_CityId = this.M_CityId ;
        city.M_CityName= this.M_CityName;
        cities.push(city);
    });
    console.log(cities);   //Move it here
},

Если вы объявите его снаружи, вы будете каждый раз добавлять к массиву ту же самую ссылку на город.

Кроме того, поскольку аякс-вызов является асинхронным, ваш старый console.log выполненный до завершения вызова ajax, объясняет, почему вы видели пустые результаты.

ура

  • 0
    Спасибо вам. Работает нормально.
0
$.each(msg, function (i, v) {
       city.M_CityId = v.M_CityId ;
       city.M_CityName= v.M_CityName;
       cities.push(city);
});

Он будет работать нормально.

-1

Вы отобразите переменную до того, как будет выполнен обратный вызов вызова AJAX. У вас должен быть ваш console.log() внутри обратного вызова.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню