我在纯Javascript中使用AJAX,如果失败则返回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因其对最终用户体验的不利影响而被弃用。如需更多帮助,请查看http://xhr.spec.whatwg.org/。
答案 0 :(得分:3)
让我们假设这是你的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();
}
现在,您可以使用response
完成后调用您的回调方法:
loadAjaX(url, callback);
答案 1 :(得分:1)
试试这个:
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();
答案 2 :(得分:0)
您可以在onreadystatechange属性上设置一个函数。
请参阅文档http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp
例如
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)");
}
}
}