【问题标题】:Why global var type variable is not accessible outside $.each when using in $.post method?为什么在 $.post 方法中使用时,在 $.each 之外无法访问全局 var 类型变量?
【发布时间】:2019-01-24 11:56:02
【问题描述】:

当我发现这个变量抛出错误时,我正在浏览一段代码。

function call(data) {
  $.each(data, function(index, value) {
    var ddlId = 'ddlCat' + data[index].docId;
    var html = '<tr id="supp_doc_row_' + data[index].docId + '" class="cls-delete-dynamic_edit">';
    var html2 = '';
    var countDocOfsameCategory = parseInt(data[index].countt) - 1;
  })

  $.post('/someController/SomeAction/', {
    requestType: 'GETDOC'
  }, function(data1) {
    $("#" + ddlId).empty();
    $("#" + ddlId).append($('<option value= "Select"> Select Type</option>'));
  })
}

现在的问题是我将这个 ddlId 变量视为全局变量。所以我使用了这个内部发布方法。但我在控制台中得到了这个。

Uncaught ReferenceError: ddlId is not defined

at Object.success (<anonymous>:1110:38)
at u (jquery-3.3.1.min.js:2)
at Object.fireWith [as resolveWith] (jquery-3.3.1.min.js:2)
at k (jquery-3.3.1.min.js:2)
at XMLHttpRequest.<anonymous> (jquery-3.3.1.min.js:2)

当我在控制台中调试它时,我发现在 $.each 调用中它具有价值,但在 $.post 中它已经消失了。

谁能告诉我这个全局变量是如何失去状态的?

【问题讨论】:

  • ddlId 不是全局的。您在 each() 块中定义了它。现在更容易看到我编辑了您的问题,因此逻辑正确缩进。您还缺少一些),这将导致语法错误。
  • 这甚至看起来都不像有效代码,有各种不匹配的括号和花括号。您确定这是您使用的实际代码吗?
  • @David 它不是整个代码,只是其中的一部分。我会编辑这个。
  • @RajanMishra:好吧,至少从语法上有效的代码开始。浏览器控制台会比我们更有效地告诉您语法错误。此外,如果您只使用 data 中的最后一个值,那么为什么要使用 .each() 呢?只需获取最后一个值,直接使用即可。

标签: javascript jquery ajax var


【解决方案1】:

var 将变量 global 用于特定范围。在函数内部定义的var 可以在函数内部的任何地方访问,但不能在外部访问,因为它不是它的范围。在函数外部的全局范围内定义var,您的所有函数都可以访问它。

【讨论】:

  • 谢谢,这让我一直很困惑。请投票。
  • 如果这是您正在寻找的答案,请将答案标记为正确,以便它也可以帮助其他人。
猜你喜欢
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 2014-07-29
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
相关资源
最近更新 更多