我已经看到无数线程在互联网上蔓延,关于返回undefined的AJAX请求中的以下类似代码:
AJAX.onreadystatechange = function() {
if(AJAX.readyState == 4) {
if(AJAX.status == 200) {
var response = AJAX.responseText;
return response;
}
else {
window.alert('Error: ' + AJAX.status);
return false;
}
}
};
我知道我应该“对responseText
做一些事情,就像把它写入HTML一样。问题:我没有那么奢侈。这段代码旨在用于运行快速AJAX请求的通用方法,这样做所有用于发出AJAX请求的代码都不必一次又一次地写出(~40×)并且有可能是次要的这里或那里的问题打破了申请。
我的方法 HAS 明确return responseText
“或者其他。” 不写HTML。 我该怎么做?另外,我很欣赏JQuery缺少插件。
我在寻找:
function doAjax(param) {
// set up XmlHttpRequest
AJAX.onreadystatechange = function() {
if(AJAX.readyState == 4) {
if(AJAX.status == 200) {
var response = AJAX.responseText;
return response;
}
else {
window.alert('Error: ' + AJAX.status);
return false;
}
}
};
// send data
}
...
function doSpecificAjax() {
var param = array();
var result = doAjax(param);
// manipulate result
}
答案 0 :(得分:3)
做了一点研究我遇到了这个SOF帖子: Ajax responseText comes back as undefined
基于该帖子,您可能希望实现这样的ajax方法:
function doRequest(url, callback) {
var xmlhttp = ....; // create a new request here
xmlhttp.open("GET", url, true); // for async
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
if (xmlhttp.status == 200) {
// pass the response to the callback function
callback(null, xmlhttp.responseText);
} else {
// pass the error to the callback function
callback(xmlhttp.statusText);
}
}
}
xmlhttp.send(null);
}
然后,您可以像这样调用该方法......
doRequest('http://mysite.com/foo', function(err, response) { // pass an anonymous function
if (err) {
return "";
} else {
return response;
}
});
这应该准确地返回responseText。如果这不能给你正确的结果,请告诉我。