javascript - 我怎样才能用ajax改变这个变量?

标签 javascript ajax

我很好奇为什么这不起作用,这是代码:

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/

相关文章:

javascript - 是否总是可以从 AST 转到原始源代码?

带有 Promise 的 Javascript 递归函数

python - 如何让脚本等待一段时间,以便加载来自 ajax 响应的数据,然后捕获网页

javascript - 使用 jQuery AJAX GET 和 AngularJS 不更新 View

javascript - 如何在Javascript中获取变量的相反 bool 值

javascript - 来自 Firefox 扩展的基于 SSL 的 XMLHttpRequest

javascript - 在我的 Django TextField 中使链接可点击

javascript - 方 block 基础游戏的颜色系统

javascript - AJAX Web 应用程序的可用性有哪些技术限制?

javascript - 从数据表中获取数据,然后使用ajax将其传递给php