• jq ajax之beforesend(XHR)


     

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

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

    代码如下:


    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请求执行完毕,在恢复按钮的可用状态。

    举个例子:

    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_Events

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

    什么时候用beforeSend,什么时候用文本替换,取决于ajax请求前后你所展示的DOM元素是否一致,如果你所展示的DOM元素在请求之前已经存在,那么通过上述文本替换的方式来处理会好些,如果除此以外你还需增加其他的需求,那么还是用beforeSend来处理吧。

  • 相关阅读:
    Android总结篇系列:Activity生命周期
    设计模式总结篇系列:策略模式(Strategy)
    设计模式总结篇系列:享元模式(Flyweight)
    设计模式总结篇系列:组合模式(Composite)
    设计模式总结篇系列:桥接模式(Bridge)
    设计模式总结篇系列:外观模式(Facade)
    设计模式总结篇系列:代理模式(Proxy)
    设计模式总结篇系列:装饰器模式(Decorator)
    设计模式总结篇系列:适配器模式(Adapter)
    设计模式总结篇系列:原型模式(Prototype)
  • 原文地址:https://www.cnblogs.com/vaevvaev/p/6810251.html
Copyright © 2020-2023  润新知