我需要一个纯JavaScript函数(抱歉,没有jQuery),它将从一个成功的AJAX调用返回响应。下面是我到目前为止得到的函数,我想从响应中返回带有HTMLobject
的HTML:
function getHtml(url) {
var httpRequest;
var HTMLobject;
if (window.XMLHttpRequest) {
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!httpRequest) {
console.error('Cannot create an XMLHTTP instance');
return false;
}
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState === 4) {
if (httpRequest.status === 200) {
// OK, turn the string into HTML.
var div = document.createElement('div');
div.innerHTML = httpRequest.responseText;
// Assign the converted HTML to HTMLobject.
HTMLobject = div.childNodes[0];
} else {
console.debug('There was a problem with the request.');
}
}
};
httpRequest.open('GET', url);
httpRequest.send();
return HTMLobject;
}
我知道为什么,HTMLobject
返回未定义的,但我需要它的工作。有办法让函数在AJAX完成后返回对象吗?
发布于 2013-02-28 11:00:13
不,解决方案是这样的,就是使用回调函数。
例如:
function getHtml(url, callback) {
....
....
callback(HTMLobject); //instead of returning the HTMLobject, call a callback function as pass the `HTMLobject` as a argument.
}
用法:
getHtml('url', function(HTMLobject){
//Do something with HTMLobject
});
而不是
var HTMLobject = getHtml('url');
//Do something with HTMLobject
发出请求async: false
是个坏主意,因为它会阻塞页面直到请求完成( ui不会被重新绘制,ui交互也不会发生)。
发布于 2013-02-28 11:03:09
使请求同步,只需执行以下操作
httpRequest.open('GET', url,false);//false make request synchronous
httpRequest.send();
"false“选项表示调用是同步的,这意味着代码将挂起,直到响应返回。
https://stackoverflow.com/questions/15133753
复制相似问题