Область видимости переменной Javascript с вызовом AJAX

0

Я не опытный программист Javascript, поэтому может быть здесь что-то не так. Я просто хочу написать функцию, которая вызывает вызов AJAX для WEBAPI и вернуть массив обратно. Но я допускаю ошибку при понимании переменной.

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;
  }

Почему возвращенные продукты теряют ценность в конце и как правильно это сделать?

  • 0
    is the correct way to do such a thing? - нет это не так
  • 2
    Консоль log2 выполняется вне обратного вызова ajax success, что означает, что запрос еще не завершен.
Показать ещё 1 комментарий
Теги:
asp.net-web-api

1 ответ

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 несколько раз для разных целей.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню