У меня есть объект города в моем проекте. Я хочу создать массив 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);
После этого я проверяю города, но есть ошибка, о которой я думаю, потому что я не вижу городов в консоли. Где моя ошибка?
Ваш код почти прекрасен, вы должны объявить 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, объясняет, почему вы видели пустые результаты.
ура
$.each(msg, function (i, v) {
city.M_CityId = v.M_CityId ;
city.M_CityName= v.M_CityName;
cities.push(city);
});
Он будет работать нормально.
Вы отобразите переменную до того, как будет выполнен обратный вызов вызова AJAX. У вас должен быть ваш console.log() внутри обратного вызова.