Как передать массив с помощью 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,
  ...,
});
Другие вопросы по тегам