问题似乎很奇怪。我在同一个aspx文件中有一个AJAX辅助函数,onreadystatechange事件就像这样处理
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4)
//do some opp
}
这很好用。我可以在回调中读取xmlhttp值。
我将AJAX助手方法移至添加js文件。我创建了一个像这样的方法
function AjaxHelper() {
this.GetValue = function(sData, sMethod, assembly, json, aSyncfunction) {
var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
if (typeof(aSyncfunction) != "undefined" && aSyncfunction != null) {
xmlhttp.onreadystatechange = aSyncfunction
}
//Ajax open and send code here
}
}
现在我在我的aspx文件中创建一个回调函数并调用AjaxHelper.GetValue()函数
var callback=function(){
if (xmlhttp.readyState == 4)
//do some opp
}
AjaxHelper.GetValue("test","getTest()","UIhelper","",callback)
并且在状态改变之后每次都会调用回调函数,但是我无法引用xmlhttp变量。 始终未定义。
我虽然它将在AJaxhelper上下文中执行,但它不是。
任何人都可以告诉我如何解决这个问题
答案 0 :(得分:2)
我虽然它将在AJaxhelper上下文中执行,但它不是。
没有。 JavaScript是词法范围的。完成函数GetValue
后,将无法再访问本地变量xmlhttp
。如果函数范围内没有闭包,保留对xmlhttp
的引用,就像在这种情况下没有,变量xmlhttp
永远消失了。
您可能希望xmlhttp
中的闭包保留GetValue
并将其传递给回调函数:
if (aSyncfunction) {
xmlhttp.onreadystatechange= function() {
aSyncfunction(xmlhttp);
};
}
或者你可以将对象分配给一个成员变量,如this.xmlhttp
,它对象内外的其他函数都可以看到。
PS。同样谨慎,JavaScript区分大小写:
var xml H ttp