纯JS中的AJAX完全处理程序

时间:2015-04-03 06:20:07

标签: 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(responsefromURL);
    }

由于Javascript是异步的,因此不会尽快加载responseFromURL。在jQuery中,我可以使用ajax.complete协议。我如何在纯Javascript中执行此操作? 我想从不同的函数加载AJAX,因为我有很多实现它的方法,所以不能一遍又一遍地输入相同的AJAX代码。

  

回应香蕉的评论,

我们可以做到:

 ajax.open("GET",url,false);
  

但是,大多数浏览器都禁用了此功能并抛出错误:主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用。如需更多帮助,请查看http://xhr.spec.whatwg.org/

3 个答案:

答案 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)");
        }
    }
}