巧用Ajax的beforeSend 提高用户体验

  jQuery是经常使用的一个开源js框架,其中的$.ajax请求中有一个beforeSend方法,用于在向服务器发送请求前执行一些动作。

具体可参考jQuery官方文档:http://api.jquery.com/Ajax_Events/

  1. $.ajax({
  2. beforeSend: function(){
  3. // Handle the beforeSend event
  4. },
  5. complete: function(){
  6. // Handle the complete event
  7. }
  8. // ......
  9. }); 

防止重复数据

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

举个例子:

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

模拟Toast效果

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

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

通过调用一个函数展示有好的动画效果

  1. <script type="text/javascript">
  2.  
  3. function test_ajax(){
  4. $.ajax(
  5. {
  6. type:"GET",//通常会用到两种:GET,POST。默认是:GET
  7. url:"a.php",//(默认: 当前页地址) 发送请求的地址
  8. dataType:"html",//预期服务器返回的数据类型。
  9. beforeSend:beforeSend, //发送请求
  10. success:callback, //请求成功
  11. error:error,//请求出错
  12. complete:complete//请求完成
  13. });
  14. }
  15. function error(XMLHttpRequest, textStatus, errorThrown){
  16. // 通常情况下textStatus和errorThown只有其中一个有值
  17. $("#showResult").append("<div>请求出错啦!</div>");
  18. }
  19. function beforeSend(XMLHttpRequest){
  20. $("#showResult").append("<div><img src='loading.gif' /><div>");
  21. }
  22. function complete(XMLHttpRequest, textStatus){
  23. $("#showResult").remove();
  24. }
  25. function callback(msg){
  26. $("#showResult").append("<div>请求成功,回传数:"+msg+"<div>");
  27. }
  28. </script>

Ajax等待返回结果时,弹出一个友好的等待提示的更多相关文章

  1. jQuery 学习笔记2 点击时弹出一个对话框

    上次学习的是页面加载完成后弹出一个警告框,这里我们改为当用户点击后弹出一个警告框. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Trans ...

  2. Android 如何监听返回键,弹出一个退出对话框

    android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用程序不小心点击退出键而直接退出.自己记录下这个简单的demo,备用. public class BackKeyTest ...

  3. [转]Android 如何监听返回键,弹出一个退出对话框

    本文转自:http://blog.csdn.net/sunnyfans/article/details/8094349 Android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用 ...

  4. ajax请求返回json数据弹出下载框的解决方法

    将返回的Content-Type由application/json改为text/html. 在struts2下: <action name="XXXAjax" class=& ...

  5. PLSQL 登录时弹出(没有登录)空白提示框

    如题,在登录的时候莫名出现了plsql登录时弹出(没有登录)的空白提示框,在网上找了很多方法之后都不行,然后发现plsql的 oracle主目录名莫名的成了空,然后直接重新把它的目录设置上 重启pls ...

  6. 用MPLAB IDE编程时,软件总是弹出一个窗口提示: “the extended cpu mode configuration bit is enabled,but the program that was loaded was not built using extended cpu instructions. therefore,your code may not work properly

    用MPLAB IDE编程时,软件总是弹出一个窗口提示:"the extended cpu mode configuration bit is enabled,but the program ...

  7. 从点击Button到弹出一个MessageBox, 背后发生了什么

    思考一个最简单的程序行为:我们的Dialog上有一个Button, 当用户用鼠标点击这个Button时, 我们弹出一个MessageBox. 这个看似简单的行为, 谁能说清楚它是如何运行起来的,背后究 ...

  8. 从点击Button到弹出一个MessageBox, 背后发生了什么(每个UI线程都有一个ThreadInfo结构, 里面包含4个队列和一些标志位)

    思考一个最简单的程序行为:我们的Dialog上有一个Button, 当用户用鼠标点击这个Button时, 我们弹出一个MessageBox.   这个看似简单的行为, 谁能说清楚它是如何运行起来的,背 ...

  9. Extjs4.2如何实现鼠标点击统计图时弹出窗口来展示统计的具体列表信息

    var pageSize = 20;//初始化每页数据条数 var winTitle = '';//初始化窗口标题 /** *点击统计图时,弹出一个窗口,显示统计的详情列表信息, *该方法为项目中所有 ...

随机推荐

  1. 【C++】几个简单课本例题

    // // main.cpp // 2_1 // // Created by T.P on 2018/2/28. // Copyright © 2018年 T.P. All rights reserv ...

  2. 解决vs2017创建.net core失败以及不能登录问题

    创建.net core web 提示值不能为空,开始以为是vs安装错误,重新安装了一遍也是这样,之前都好好的,然后登录也不行了(提示我们无法刷新此账号的凭据),百度了下,是ie不能上网的问题.解决了登 ...

  3. rsync配置两台服务器之间的文件备份(同步)

    rsync配置两台服务器之间的文件备份(同步) 前情提要 环境: 192.168.1.2 主服务器 centos 7.7 192.168.1.3 备份服务器 centos 7.7 rsync 安装(两 ...

  4. Celery 收下这捆芹菜!

    目录 Celery简介 Celery构成 Task Broker Worker Backend Celery使用 安装 基本使用 异步任务: delay 延迟任务: apply_async 周期任务: ...

  5. iOS滤镜系列-滤镜开发概览

    概述 滤镜最早的出现应该是应用在相机镜头前实现自然光过滤和调色的镜片,然而在软件开发中更多的指的是软件滤镜,是对镜头滤镜的模拟实现.当然这种方式更加方便快捷,缺点自然就是无法还原拍摄时的真实场景,例如 ...

  6. css label两端对齐

    上面这种效果很常见,实现的代码如下: html部分 <ul> <li class="detail_item"> <span class="d ...

  7. 006.kubernets之Deployment简单部署

    一 Deployment相对于RC的优势 RS与Deployment主要用于替代RC.RS的全称为Replica Set.相对于RC,RS与Deployment的优势如下: RC只支持基于等式的sel ...

  8. 浏览器从输入url 到页面展示完成响应过程

    用户从输入 url 到浏览器响应,呈现给用户的具体过程 1.用户在输入栏输入地址 (1) 如果有 beforeunload 事件会先执行判断继续还是跳出操作 (2) 浏览器进程识别是 地址还是关键字检 ...

  9. cogs 49. 跳马问题 DFS dp

    49. 跳马问题 ★   输入文件:horse.in   输出文件:horse.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 有一只中国象棋中的 “ 马 ” ,在半张 ...

  10. cogs 728. [网络流24题] 最小路径覆盖问题 匈牙利算法

    728. [网络流24题] 最小路径覆盖问题 ★★★☆   输入文件:path3.in   输出文件:path3.out   评测插件时间限制:1 s   内存限制:128 MB 算法实现题8-3 最 ...