带有AJAX调用的Javascript变量范围

时间:2014-02-26 10:26:31

标签: javascript jquery asp.net-web-api

我不是一个经验丰富的Javascript程序员,所以可能存在一些基本错误。 我只想编写一个函数,对WEBAPI进行AJAX调用并返回数组。但我在理解变量范围时犯了一些错误。

function GetProductsOfAccount(AccountID) {
      var returnProducts;
      console.log("In GetProductsOfAccount");
      var serviceURL = productURI + "/GetProductsOfAccount/" + AccountID;
      console.log(serviceURL);
      $.ajax({
          type: "GET",
          datatype: "json",
          url: serviceURL,
          context: this,
          success: function (Products) {
              console.log("From AJAX" + Products);
              returnProducts = Products;

              //This correctly holds and shows all products
              console.log("Return Products 1 " + returnProducts);
          },
          error: function (x, y, z) {
              returnProducts = null;
              console.log("Error" + x + '\n' + y + '\n' + z);
          }
      });

     //This just shows undefined
      console.log(" Returned Products 2 " + returnProducts);
      return returnProducts;
  }

为什么returnProducts最终会失去价值,这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

编辑:使用jQuery延迟的稍微替代语法(我没有在Arun的链接中看到它):

var productsOfAccount = function (AccountID) {

  var serviceURL = productURI + "/GetProductsOfAccount/" + AccountID;

  return $.ajax({
      type: "GET",
      datatype: "json",
      url: serviceURL,
  }).promise();
}

var test = $.productOfAccount(20)

test.then(function(products){
          console.log("From AJAX" + products);
          returnProducts = Products;

          //This correctly holds and shows all products
          console.log("Return Products 1 " + returnProducts);
}); 

您可以多次应用test.then用于不同目的。