我很好奇为什么这不起作用,这是代码:
function Ajax(sUrl, fCallback) {
var url = sUrl || '';
var callback = fCallback || function () {};
var xmlhttp = (function () {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
return new ActiveXObject("Msxml2.XMLHTTP.6.0");
} catch (e) {
try {
return new ActiveXObject("Msxml2.XMLHTTP.3.0");
} catch (err) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
} else {
return null;
}
}());
this.setUrl = function (newUrl) {
url = newUrl;
};
this.setCallback = function (func) {
callback = func;
};
this.request = function (method, data) {
if (xmlhttp === null) { return false; }
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4) {
callback(xmlhttp.status, xmlhttp.responseXML, xmlhttp.responseText);
}
};
data = data || '';
data = encodeURIComponent(data);
if ((/post/i).test(method)) {
xmlhttp.open('POST', url);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send(data);
} else {
var uri = data === '' ? url : url + '?' + data;
xmlhttp.open('GET', uri);
xmlhttp.send();
}
return true;
};
return this;
}
var ajax = new Ajax(''); // sets the url, not necessary for this demonstration
var changed = false;
function change() {
changed = true;
}
function foo() {
ajax.setCallback(change);
ajax.request();
alert(changed);
}
foo();
这里有一个 fiddle :http://jsfiddle.net/dTqKG/
我觉得 change
函数会创建一个确实会更改 changed
变量的闭包。有谁知道这是怎么回事吗?
最佳答案
ajax.request();
将在调用 change()
之前返回。这就是 AJAX 调用的异步性质,也是您需要回调而不是仅仅从 send()
方法获取返回值的原因。
除此之外,代码中可能还有其他一些问题。我质疑您为什么不使用现成的众多 AJAX 框架之一,而是编写自己的框架。
关于javascript - 我怎样才能用ajax改变这个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8692319/