jq ajax之beforesend(XHR)

 

用于在向服务器发送请求前添加一些处理函数。例如:搜寻附近店铺,未搜寻出来的时候显示:正在搜寻中...php

常见的一种效果,在用ajax请求时,没有返回前会出现前出现一个转动的loading小图标或者“内容加载中..”,用来告知用户正在请求数据。这个就能够用beforeSend方法来实现。html

 

代码以下:前端


function test_ajax(){
   $.ajax(
   {
      type:"GET",//一般会用到两种:GET,POST。默认是:GET
      url:"a.php",//(默认: 当前页地址) 发送请求的地址
      dataType:"html",//预期服务器返回的数据类型。
      beforeSend:beforeSend, //发送请求
      success:callback, //请求成功
      error:error,//请求出错 
      complete:complete//请求完成
   });
}
function error(XMLHttpRequest, textStatus, errorThrown){
  // 一般状况下textStatus和errorThown只有其中一个有值 
  $("#showResult").append("<div>请求出错啦!</div>");
}
function beforeSend(XMLHttpRequest){
  $("#showResult").append("<div><img src='loading.gif' /><div>");
}
function complete(XMLHttpRequest, textStatus){
  $("#showResult").remove();
}
function callback(msg){
  $("#showResult").append("<div>请求成功,回传数:"+msg+"<div>");
}
 

防止重复数据
在实际项目开发中,提交表单时经常因为网络或者其缘由,用户点击提交按钮误认为本身没有操做成功,进而会重复提交按钮操做次数,若是页面前端代码没有作一些相应的处理,一般会致使多条一样的数据插入数据库,致使脏数据的增长。要避免这种现象,在$.ajax请求中的beforeSend方法中把提交按钮禁用掉,等到Ajax请求执行完毕,在恢复按钮的可用状态。jquery

举个例子:ajax

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 提交表单数据到后台处理
$.ajax({
   type: "post" ,
   data: studentInfo,
   contentType: "application/json" ,
   url: "/Home/Submit" ,
   beforeSend: function () {
     // 禁用按钮防止重复提交
     $( "#submit" ).attr({ disabled: "disabled" });
   },
   success: function (data) {
     if (data == "Success" ) {
       //清空输入框
       clearBox();
     }
   },
   complete: function () {
     $( "#submit" ).removeAttr( "disabled" );
   },
   error: function (data) {
     console.info( "error: " + data.responseText);
   }
});

模拟Toast效果
ajax请求服务器加载数据列表时提示loading(“加载中,请稍后...”),数据库

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$.ajax({
   type: "post" ,
   contentType: "application/json" ,
   url: "/Home/GetList" ,
   beforeSend: function () {
     $( "loading" ).show();
   },
   success: function (data) {
     if (data == "Success" ) {
       // ...
     }
   },
   complete: function () {
     $( "loading" ).hide();
   },
   error: function (data) {
     console.info( "error: " + data.responseText);
   }
});

 

方法beforeSend,用于在向服务器发送请求前添加一些处理函数。这是一个ajax事件,在ajax请求开始以前就被触发,一般容许用户修改XMLHttpRequest对象(好比说设置附加的头部信息),关于ajax事件的解释可参考文档:http://docs.jquery.com/Ajax_Eventsjson

咱们还见到一种状况,不少网站在加载内容的过程当中给出“数据加载中,请稍候”的提示,当内容被加载完毕后显示内容。能够设置默认文本显示为加载中的提示,当内容加载完毕时,咱们能够经过ID选择器,将该标签中的文本替换成最终的内容。以此来取代beforeSend,效率更高。服务器

何时用beforeSend,何时用文本替换,取决于ajax请求先后你所展现的DOM元素是否一致,若是你所展现的DOM元素在请求以前已经存在,那么经过上述文本替换的方式来处理会好些,若是除此之外你还需增长其余的需求,那么仍是用beforeSend来处理吧。网络

相关文章
相关标签/搜索