收到AJAX响应时引发事件

时间:2014-05-30 14:12:08

标签: javascript ajax httpresponse

我想知道在我的网页收到任何AJAX响应时是否可以举起活动。我在SharePoint工作,所以Microsoft有很多AJAX将数据加载到webparts中,我想在我的页面收到AJAX响应时发出一个事件,这样我就可以检查数据是否已经存在加载到webpart。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

这是一个包装全局XMLHttpRequest对象以记录所有open()ed URL的示例:

(function(){
  var ajaxOpen=window.XMLHttpRequest.prototype.open;
  window.XMLHttpRequest.prototype.open=function(m,u,a){
    this.addEventListener("load", function(){ console.log("ajax loaded", new Date(), m, u, a ); });
    return ajaxOpen.call(this,m,u,a);
  };
}());



$.get("/", function(e){
  console.log(e.length+" bytes fetched");
});

在此页面上运行时,会记录以下内容:

 ajax loaded Fri May 30 2014 09:56:34 GMT-0500 (Central Daylight Time) POST /posts/23957352/edit-submit/b4dd7272-6618-4c79-9810-e8ff71122b51 true 

请注意,jQuery仅用于显示所有ajax调用都受到影响而不修改特定库或现有代码。通过一些修改,可以记录更多细节,如数据,响应大小,调用持续时间等等。

这样做的RAM成本很低,而旧版浏览器可能不喜欢拥有"主机对象"搞砸了,但这种代码风格可以用于调试,单元测试或性能分析。

编辑:我发现ajax允许使用addEventListener()(仅限现代浏览器)允许多个事件处理程序,因此上面的代码现在记录实际响应。

答案 1 :(得分:0)

当发送对服务器的请求时,我们可以根据响应执行一些操作。每次readyState更改时都会触发onreadystatechange事件.readyState属性保存XMLHttpRequest的状态。在onreadystatechange事件中,我们指定在准备好处理服务器响应时会发生什么。

当readyState为4且status为200时,响应就绪:

以下javascript代码将确定是否正确收到回复。

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }

readyState属性可以根据我们的请求状态具有以下值: -

0:请求未初始化

1:建立服务器连接

2:收到请求

3:处理请求

4:请求已完成且响应已准备好