【问题标题】:Not able to access Javascript variable which is in Scope..? [duplicate]无法访问 Scope.. 中的 Javascript 变量? [复制]
【发布时间】:2014-06-05 14:11:36
【问题描述】:

下面是我的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);

【问题讨论】:

  • 正在做错事......忘记了“Ajax”中的“A”代表什么。
  • @DaveNewton 我不能理解你。
  • 现在我明白了!逻辑思维差:( :(

标签: javascript jquery ecmascript-5


【解决方案1】:

这里的问题是警报会在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);
    });

【讨论】:

  • 但我在 $.getJSON 函数中初始化 'allproductsAndPrice' 对吗?所以它不会更新??
  • @Uthaiah 不,你不是。
【解决方案2】:

试试这个。这将起作用并帮助您确定是否存在错误。 第二件事 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2020-05-03
    相关资源
    最近更新 更多