Javascript 纯JS中的AJAX完整处理程序
我在纯Javascript中使用AJAX,它返回Javascript 纯JS中的AJAX完整处理程序,javascript,ajax,Javascript,Ajax,我在纯Javascript中使用AJAX,它返回false如果失败,否则返回json数据: var responsefromURL = loadAjaX(url); if(responsefromURL != false) { alert("Failed to fetch Data from URL. (Store/Store)"); } else { this.prepareStoreFromJSON(respon
false
如果失败,否则返回json
数据:
var responsefromURL = loadAjaX(url);
if(responsefromURL != false)
{
alert("Failed to fetch Data from URL. (Store/Store)");
}
else
{
this.prepareStoreFromJSON(responsefromURL);
}
由于Javascript是异步的,responseFromURL
不会尽快加载。在jQuery中,我可以使用ajax.complete
协议。如何在纯Javascript中实现这一点我想从另一个函数加载AJAX,因为我有很多方法可以实现这一点,所以不能反复键入相同的AJAX代码。
针对香蕉公司的评论
我们可以做到:
ajax.open("GET",url,false);
但是,大多数浏览器都禁用了此功能并抛出错误:主线程上的同步XMLHttpRequest被弃用,因为它会对最终用户的体验产生有害影响。如需更多帮助,请查看
可以在onreadystatechange属性上设置函数 见文件 范例
var COMPLETE = 4;
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET",url,true);
xmlhttp.onreadystatechange=function() {
// if complete and status 200
if (xmlhttp.readyState == COMPLETE && xmlhttp.status == 200) {
if (xmlhttp.responseText != null) {
prepareStoreFromJSON(xmlhttp.responseText);
}
else {
alert("Failed to fetch Data from URL. (Store/Store)");
}
}
}
试试这个:
var xmlhttp;
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var responsefromURL = xmlhttp.responseText;
if(responsefromURL != false)
{
alert("Failed to fetch Data from URL. (Store/Store)");
}
else
{
var responseJSON = eval('('+responsefromURL+')');
this.prepareStoreFromJSON(responseJSON);
}
}
}
xmlhttp.open("GET",url,true);
xmlhttp.send();
假设这是您的AJAX函数:
function loadAjaX(url, callback)
{
var ajax;
if (window.XMLHttpRequest) {
ajax = new XMLHttpRequest();
} else {
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
ajax.onreadystatechange = function() {
if (ajax.readyState==4 && ajax.status==200) {
callback(ajax.responseText);
}
}
ajax.open("GET",url,true);
ajax.send();
}
现在,您可以在完成时使用响应
调用回调方法:
loadAjaX(url, callback);
将false设置为
XMLHttpRequest.open()
方法的第三个参数会使调用同步。@这是有道理的,但大多数浏览器都禁用了此功能并抛出错误:synchronous XMLHttpRequest在主线程上被弃用,因为它会对最终用户的体验产生有害影响。如需更多帮助,请查看http://xhr.spec.whatwg.org/.
这个错误也有道理,毕竟你的网站会一直挂起,直到ajax恢复。但是,您可以将其放入函数中,并从setTimeout()
调用它,它将在新线程上运行整个过程。@code>setTimeout()中的香蕉计时器不会在单独的线程中运行,它们只会在超时结束后的下一个事件循环中运行。()据我所知,在单独的执行上下文中运行JS的唯一方法是web workers。这是一个我也找到的解决方案。但是我有一个有组织的类,希望在不同的点调用AJAX方法。我一直在寻找类似于complete上的。嗯,这是一个我也找到的解决方案。但是我有一个有组织的类,希望在不同的点调用AJAX方法。我正在寻找类似complete
上的。如果我想使用多个参数调用该怎么办?