Как передать массив с помощью AJAX
Мне нужно заполнить мой массив информацией, когда я перетаскиваю элемент в зону корзины.
var ProductInfo=new Array();
myGlobalArray=GetProductById(iProductId);
которые вызывают эту функцию Ajax
function GetProductById(iProductId)
{
var ProductInfo=new Array();
console.log("2");
$.ajax({
type: 'POST',
url: 'services/ManageCategoriesServices.asmx/GetProductById',
dataType: 'xml',
'data': {'iProductId': iProductId },
success: function(data) {
source = null;
try
{
console.log("source product-> ",data.activeElement.childNodes);
myGlobalArray=TestProduct(data.activeElement.childNodes);
console.log("In Ajax myGlobalArray-> ",myGlobalArray); return myGlobalArray;
}
catch(e) {
$('#m_lblStatus').text('failed to read json');
}
},
fail: function() { $('#m_lblStatus').text('fail');}
});
return myGlobalArray;
}
Я проверил, что myGlobalArray получает всю необходимую мне информацию, но когда я возвращаюсь к своей первой функции, когда я пытаюсь скопировать массивы
myGlobalArray=GetProductById(iProductId);
он пустой и говорит
Нет дочерних объектов
Я использовал глобальный массив, потому что обычный не будет работать, поэтому я подумал, что глобальный будет работать, но нет в ajax, я вижу его полным, но в первой функции он пустой.
In Ajax myGlobalArray-> ["medium_101-01-004-02.jpg", "303", "101-01-004-02", "44.95"]
After Ajax myGlobalArray-->[] There are no child objects
В чем проблема?
1 ответ
AJAX означает "Асинхронный Javascript и XML". Асинхронный является ключевым словом в этой ситуации. Проблема в том, что возврат выполняется до завершения вашего запроса. Решение: вы можете использовать переменную myGlobalArray в обработчике события onSuccess или использовать ajax с опцией async == false, например:
$.ajax({
...,
async: false,
...,
});