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