jQuery/JavaScript变量范围

jQuery/JavaScript变量范围,javascript,jquery,ajax,scope,Javascript,Jquery,Ajax,Scope,我没有发布我正在运行的确切代码,因为代码相当复杂。如果发布的代码中有语法错误,请忽略它们,因为这些不是问题的原因。该代码在Firefox中按预期工作,但在IE或Chrome中不起作用。此外,我可以在Firebug lite中验证代码运行的顺序不应该导致问题。我试图做的是调用一个web服务,解析结果,并将所需的信息存储在一个全局变量中,以便在以后的函数中使用,我只能在DOM加载完成后调用这些函数。在加载文档之前,我运行了setUserFields函数。该函数将被调用并设置变量,但变量仅在parse

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

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

Ajax中的第一个字母代表 “异步”,意思是 操作并行进行,并且 不能保证完工顺序。 默认情况下,$.ajax()的异步选项 设置为true,表示该代码 执行可以在 提出请求。设置此选项 为false(从而使呼叫不可用) 长异步)是一个很强的 气馁,因为它会导致 浏览器将变得无响应


这主要是一个时间问题

在调用这些变量时,AJAX代码没有得到执行

 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
})
要解决此问题,请在文档中调用AJAX。准备就绪,然后您可以向
文件1
字段2
发出警报


由于AJAX的异步特性,我非常确定这是一个时间问题。

+1这是一个时间问题。您不能依赖在成功回调中填充的全局变量(在该回调之外)。是的,您需要将对field1和field2所做的任何操作都放在完整回调中。为变量设置初始值并检查它可能会有所帮助。如果
alert()
显示初始值,这意味着变量范围正常,只是对web服务的异步调用尚未完成。
 alert(field1); //undefined in IE and Chrome | Gives correct value in FireFox
 alert(field2); /