簡體   English   中英

如何使用ajax更改此變量?

[英]How can I change this variable with 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();

這里有一個小提琴: http : //jsfiddle.net/dTqKG/

我覺得change函數將創建一個確實會更改changed變量的閉包。 有人知道發生了什么嗎?

ajax.request(); 將在調用change()之前返回。 這就是AJAX調用的異步性質,也是您需要回調而不是僅僅從send()方法獲取返回值的原因。
除此之外,代碼中可能還存在其他問題。 我質疑為什么您不使用現成的許多AJAX框架之一而不是編寫自己的框架。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM