繁体   English   中英

jQuery / JavaScript 变量范围

[英]jQuery / JavaScript variable scope

 var field1;
 var field2;   
     function setUserFields() {
            $.ajax({
                type: "POST",
                url: "url",
                dataType: "xml",
                complete: parseXml
            });   
     } 
    function parseXml {
      $(xml.responseXML).find("myValue").each(function()
      {
          field1 = $(this).attr('attr1');
          field2 = $(this).attr('attr2');
          alert(field1 + ' ' field2); //shows correct values
      });
    }
 setUserFields();    

$(function() {
     alert(field1); //undefined in IE and Chrome | Gives correct value in FireFox
     alert(field2); //undefined in IE and Chrome | Gives correct value in FireFox
})

我没有发布我正在运行的确切代码,因为代码相当复杂。 如果发布的代码中有语法错误,请忽略它们,因为这些不是我问题的原因。 该代码在 Firefox 中按预期工作,但不适用于 IE 或 Chrome。 此外,我可以在 Firebug lite 中验证代码运行的顺序不应该导致问题。 我想要做的是调用一个 web 服务,解析结果并将所需的信息存储在一个全局变量中,以便在以后的函数中使用,我只能在 DOM 完成加载后调用这些函数。 我在加载文档之前运行setUserFields函数。 该函数被调用并设置变量,但变量仅在parseXML()的范围内可用。 由于我已经声明了所有函数范围之外的变量,并且正在parseXML函数内设置变量, parseXML我希望这些变量将被全局设置。 但是,只有在 Firefox 中,我才能访问变量而不定义它们。 我对 javascript 领域还很陌生,所以我可能会错过一个明显的陷阱。 我尝试了几个小时的谷歌搜索,但没有任何运气。 任何帮助将不胜感激。

这不是范围问题。 这可能是由于 AJAX 调用的异步特性。

Ajax 中的第一个字母代表“异步”,意思是操作并行发生,完成的顺序没有保证。 $.ajax() 的 async 选项默认为 true,表示发出请求后可以继续执行代码。 强烈建议不要将此选项设置为 false(从而使调用不再是异步的),因为它会导致浏览器无响应。

jQuery.ajax()

这主要是时间问题。

当您调用这些变量时,您的 AJAX 代码尚未执行

 alert(field1); //undefined in IE and Chrome | Gives correct value in FireFox
 alert(field2); /

要解决此问题,请在文档中调用 AJAX。 准备好之后,您可以提醒filed1field2

我很确定这是由于 AJAX 的异步性质造成的计时问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM