从函数返回数组时,Javascript命名空间有问题

时间:2012-05-11 22:03:49

标签: javascript jquery ajax

我对sharepoint进行了AJAX调用(如下所示)。

function GetProductIDSforActiveQuote() {
var arr = new Array();
$().SPServices({
    operation: "UpdateListItems",
    listName: "Quotes",
    ID:quoteID,
    completefunc: function (xData, Status) {
      $(xData.responseXML).SPFilterNode("z:row").each(function() {
        arr = $(this).attr("ows_Products").split(',');
      });
    }
  });
return arr;
}

我正在尝试返回一个数组,但最后得到一个空数组。我可以通过在completefunc块中放置一个控制台日志来验证值是否正确返回。

2 个答案:

答案 0 :(得分:2)

AJAX调用是异步的。这意味着,当您点击return arr行时,completeFunc尚未被调用。

你可以修改代码,这样它需要一个提供数组的回调函数吗?像这样:

function GetProductIDSforActiveQuote(callback) {
    // other details omitted
    completefunc: function (xData, Status) {          
        arr = // your code
        callback(arr); // <- here's the difference.
      };        
}    

在回调函数中,您可以根据需要处理数组。

答案 1 :(得分:1)

看起来SPServices是异步的,因此它会在响应到来之前返回。您必须使用completefunc内的数组。