1

当我将项目拖到购物车区域时,我需要用信息填充数组

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

问题出在哪里?

4

1 回答 1

2

AJAX 是指“异步 Javascript 和 XML”。在这种情况下,异步是关键词。问题是:在您的请求完成之前返回运行。解决方案:您可以在 onSuccess 事件处理程序中使用 myGlobalArray 变量或使用带有 async == false 选项的 ajax,如下所示:

$.ajax({
  ...,
  async: false,
  ...,
});
于 2013-06-16T15:04:30.780 回答