我在javascript中创建了一个自定义GET
和POST
函数来处理我的AJAX请求。当我尝试拨打电话时,首先执行fail
回调,然后执行done
回调。 AJAX的响应是一个有效的JSON字符串,我不明白为什么会发生这种情况。如果响应是有效的JSON,则只能执行done
回调。
get('ajax/autocomplete.php', {q: q}, function(data) {
//done, executed second
}, aww());//Error, executed first
function get() {
var data,
done,
fail,
done_index = null,
str = '',
ajax = new XMLHttpRequest(),
url = arguments[0];
for(var i=0; i<arguments.length; i++) {
if(typeof arguments[i] == 'object') {
data = arguments[i];
for(var key in data) {
if(str != "") str += "&";
str += key + "=" + encodeURIComponent(data[key]);
}
if(str != '') url += '?';
} else if(typeof arguments[i] == 'function') {
if(!done_index) {
done = arguments[i];
done_index = i;
}
if(i != done_index) {
fail = arguments[i];
}
}
}
ajax.onreadystatechange = function() {
console.log(ajax.readyState, ajax.status);
if(ajax.readyState === XMLHttpRequest.DONE && ajax.status === 200) {
var response = ajax.responseText;//treat empty response as valid JSON
if(response.length == 0) response = '""';
try {
var json = JSON.parse(response);
return (done) ? done(json) : false;
} catch(e) {
console.log(e);
return (fail) ? fail() : false;
}
}
};
ajax.open('get', url + str);
ajax.send();
}
答案 0 :(得分:1)
您正在将参数列表中的aww()
函数调用到get()
,因为后面有括号。您应该只传递对该函数的引用。它应该是:
get('ajax/autocomplete.php', {q: q}, function(data) {
}, aww);