我编写了一些脚本,但现在我不知道如何将回调函数添加到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不是函数
答案 0 :(得分:0)
这是因为Auth.Login
是一个字符串而不是一个函数。您需要使用window
引用它才能使其正常工作:
而不是fnCallback(data)
使用window[fnCallback](data)