无法访问范围内的Javascript变量

Not able to access Javascript variable which is in Scope..?

本文关键字:Javascript 变量 范围内 访问      更新时间:2023-09-26

下面是我的javascript代码。我在函数外声明变量"allproductsAndPrice"。但是我无法访问它后,我初始化它。我做错什么了吗?当我试着提醒它时,它没有打印任何东西。

var allproductsAndPrice = "";
$.getJSON("/Home/GetProducts",
    function (data, textStatus, jqXHR) {
        for (var i = 0; i < data.length; i++) {
            allproductsAndPrice = allproductsAndPrice + 
                "<option name='productName' id=" + data[i].productPrice + ">" + 
                data[i].Pname + "</option>";
        }
    }
);
alert(allproductsAndPrice);

这里的问题是警报将在getJSON的回调被调用之前被调用。这意味着allProductsAndPrice在警报中始终是一个空字符串。

getJSON的调用是异步的,这意味着它将触发ajax请求的"完成"事件,然后回调将被执行。你可以使getJSON调用同步,但这有点违背思想。

要更好地了解正在发生的事情,可以这样做:

  1. allproductsAndPrice初始化为当前作用域上的"
  2. 创建Ajax请求
  3. allproductsAndPrice的内容仍然是"
  4. 完整事件被触发
  5. 执行回调并影响allproductsAndPrice

你应该这样做:

    var allproductsAndPrice = "";
    $.getJSON("/Home/GetProducts",
      function (data, textStatus, jqXHR) {
          for (var i = 0; i < data.length; i++) {
              allproductsAndPrice = allproductsAndPrice + "<option name='productName' id=" + data[i].productPrice + ">" + data[i].Pname + "</option>";
          }
          // More code that should be executed
          alert(allproductsAndPrice);
    });

试试这个。这将有效并帮助您确定是否存在错误。第二件事var allproductsAndPrice将保持空警报,因为ajax请求是异步的,javascript将不会等待ajax响应。

var allproductsAndPrice = "";
try {
    $.getJSON("/Home/GetProducts", function(data) {
        for (var i = 0; i < data.length; i++) {
            allproductsAndPrice = allproductsAndPrice + "<option name='productName' id=" + data[i].productPrice + ">" + data[i].Pname + "</option>";
        }
    });
} catch (e) {
    alert(e.message);
}
alert(allproductsAndPrice);