XHR onreadystatechange回调函数

时间:2014-03-08 10:27:52

标签: javascript

我编写了一些脚本,但现在我不知道如何将回调函数添加到xhr对象的onreadystatechange函数中。

这是一些代码。

    function Trace (str){
      alert(str);
    }

    //login durchführen
    var Auth = {
        auth_url : "?evt=Login&mod=_do",
        loggedin : false
    };

    Auth.Init = function(){
        if(!this.loggedin){
            Loader.GetJSON(api.url+this.auth_url+"&username=****&password=*****", true, "Auth.Login");
        }
    }

    Auth.Login = function(object){
        Trace("Auth.Login");
        if(object.user_ok == 200){
            Trace("true!");
        }else{
            Trace("false");
        }
    };

    var Loader = {
      xhr : null
    }

    Loader.GetJSON = function(url, type, fnCallback){

        if (this.xhr != null) {
            try {
                this.xhr.destroy();
                this.xhr = null;
            } catch (e) {
                Trace("Fehler in Loader.Request : " + e);
            }
        }
        this.xhr = new XMLHttpRequest();
        if (this.xhr) {

            if (typeof this.xhr.overrideMimeType == "function") {
                this.xhr.overrideMimeType('application/json');
            }
            //********
            this.xhr.onreadystatechange = function() {
                if (Loader.xhr.readyState == 4 && Loader.xhr.status == 200) {
                    var data = api.ParseJSON(Loader.xhr.responseText);
                    if (typeof data == 'object') {
                        fnCallback (data);
                    }else {
                        Trace(":::: Error in Loader.GetJSON => invalid json");
                    }
                } else if (Loader.xhr.readyState == 4 && Loader.xhr.status != 200) {
                    Trace(":::: Loader.GetJSON Connection error");

                }
            };

            // ******************
            this.xhr.open("GET", url, type);
            this.xhr.send(null);
            // ******************

        } else {
            Trace(":::: Loader.Request Fatal Error");

        }
    };

Auth.Init();

但是我在这里得到一个错误:fnCallback不是函数

1 个答案:

答案 0 :(得分:0)

这是因为Auth.Login是一个字符串而不是一个函数。您需要使用window引用它才能使其正常工作:

而不是fnCallback(data)

使用window[fnCallback](data)