【发布时间】:2016-06-24 02:02:33
【问题描述】:
我在 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();
}
【问题讨论】:
-
console.log(e)显示什么? -
没有记录错误。
标签: javascript json ajax xmlhttprequest