针对移动端的前端工作流(6)—Ajax请求的正确姿势

src/js/index.js中index.js中示例了处理一个ajax请求的正确姿势,其中有5点需要注意的地方,请看下面的demo

  1. /**
  2. * 点击按钮发送ajax请求
  3. * 1. 考虑ajax请求失败的情况
  4. * 2. 考虑ajax请求成功,但是状态不是200的情况
  5. * 3. 考虑ajax请求成功,状态是200,但是没有数据的情况
  6. * 4. 考虑ajax重复请求的情况
  7. * 5. 考虑ajax请求接口时间长的交互效果
  8. */
  9. var submit = function () {
  10. var me = $(this);
  11. // 判断是否是重复点击
  12. if (me.hasClass('disabled')) {
  13. return;
  14. }
  15. me.addClass('disabled');
  16. // 发送的数据
  17. var sendData = {
  18. time: 3
  19. };
  20. $.ajax({
  21. url: 'http://wiki.xyzphp.com/t.php',
  22. type: 'POST',
  23. data: sendData,
  24. beforeSend: function () {
  25. // 发送ajax请求前的loading
  26. lnv.pageloading();
  27. }
  28. })
  29. // 服务器请求成功
  30. .done(function (res) {
  31. // 处理返回的数据,因为有的时候返回的数据可能是字符串,而非json格式
  32. res = typeof(res) === 'string' ? JSON.parse(res) : res;
  33. // 如果返回的数据状态是200
  34. if (res.status == 200) {
  35. // 如果返回的数据data为空
  36. if (res.data.length === 0) {
  37. lnv.alert({
  38. title: '提示',
  39. content: '没有数据',
  40. alertBtnText: '确定',
  41. alertHandler: function () {
  42. alert('点击了确定');
  43. }
  44. });
  45. }
  46. else {
  47. // 如果返回的数据data不为空
  48. }
  49. }
  50. // 如果返回的数据状态不是200
  51. else {
  52. alert('error');
  53. }
  54. })
  55. // 服务器请求失败
  56. .fail(function (jqXHR, textStatus, errorThrown) {
  57. alert('error');
  58. })
  59. .always(function () {
  60. // 无论成功还是失败,删掉loading效果
  61. lnv.destroyloading();
  62. // 删除重复点击的标示
  63. me.removeClass('disabled');
  64. });
  65. };