前言

  公司做网上促销活动,需要充值换取相应的抽奖资格,抽奖可以获得丰厚的礼品,而且抽奖资格门槛有点高,领导下达命令保证活动的正常上线与运行,领导很重视,就这样,在领导的安排下进行了相关活动的coding。。。

正文

  开发过程倒还顺利,只是转盘抽奖耽误了点时间,不过最后还是正常制作完毕,相关测试人员也进行了测试,活动上线开始倒计时,心里有那么点忐忑。

  果不其然,活动上线2分钟,一个玩家在没有任何充值,而且抽奖资格也是0的情况下,抽了5,6次,都获得了比较给力的礼品,这是查看数据库记录得到的结果,由于活动上线会随时关注,便及时发现了这个问题,再看抽奖资格为-6,我了个去,明明在抽奖之前就已经做了验证,不可能是抽奖验证出了问题,估计是充值接口的问题,于是让同事再查看一下充值接口,结果没有任何问题,其实用脑袋想想也知道,不可能是充值接口的问题,因为玩家根本一毛钱也没冲,就和充值接口的一毛钱关系也没有,好吧,那么问题来了。。。是不是验证出现问题了?

  翻看代码,设置断点

  进入方法之后,走了741行,再进行下一步,直接执行到了754行,我去,什么情况,这样result的值就成了null了,后面的判断也就不起作用了;

  就这样调试了N遍,后台ashx文件也查看了,如果是后台ashx程序有问题,那么应该走error,但是没有走,这就说明程序根本没有走后台,好吧,一个同步异步的思想,陡然出现在了脑海里,于是乎,在上面这段代码加了一句,如下:

  断点走起,OK,一切正常,该做的验证都通过了,好吧,问题终于解决了。

  幸亏及时发现问题,及时解决了问题,否则,我该吃炒鱿鱼了。。。

  其实只是解决了前端问题,根本问题没有解决,看了园友的评论,才意识到服务端没有做验证,惭愧,惭愧,现在已做了服务端的验证,多谢各位园友提醒!,此处用醒目的颜色提醒自己,以后不要再犯同样的错误,另一个,避免我的错误言论误导了其他园友,请多谅解!(此为园友评论后新增)

知识点与总结

  1.Jquery中的ajax在默认不写async情况下,请求为异步请求;即:async:true;

  2.如果项目中在做一项操作之前要进行ajax的验证,无论同步或者异步,都必须在验证通过后,方才进行其他操作。

  3.熟练应用error参数,关注返回来的异常信息,从而判定程序的错误位置;

  4.项目前端做验证,后端也做相应的验证;前端做验证是为了减少服务器压力和增加用户体验,后端做验证才是为了安全。(看各位园友的评论,新加的一条;)

  

一个ajax同步与异步引发的血案。的更多相关文章

  1. AJAX同步与异步

    今天来大概说说AJAX中的同步与异步.其实,就我的理解,同步与异步的区别就是程序执行过程中是否有等待. 同步:意思就是js代码加载到当前的 AJAX时候,会等待AJAX代码执行完毕后再开始加载其他代码 ...

  2. AJAX发送PUT请求引发的血案

    如果直接发送ajax=put形式的请求      是拿不到请求体中的数据的.           Tomcat:              1.将请求体中的数据,封装一个map             ...

  3. 一个无锁消息队列引发的血案(四)——月:RingQueue(上) 自旋锁

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  4. 一个无锁消息队列引发的血案(六)——RingQueue(中) 休眠的艺术 [续]

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  5. 一个无锁消息队列引发的血案(五)——RingQueue(中) 休眠的艺术

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  6. 一个无锁消息队列引发的血案(三)——地:q3.h 与 RingBuffer

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  7. 使用C++11实现一个半同步半异步线程池

    前言 C++11之前我们使用线程需要系统提供API.posix线程库或者使用boost提供的线程库,C++11后就加入了跨平台的线程类std::thread,线程同步相关类std::mutex.std ...

  8. AJAX同步改异步

    var temp; $.ajax({ async: false, type : "POST", url : defaultPostData.url, dataType : 'jso ...

  9. ajax同步、异步执行简单理解与证明

    此理解范例代码来自前几篇随笔! 首先我们来先了解下AJAX: Ajax:全称“Asynchronous Javascript and XML”(异步Javascript和XML),他是由Javascr ...

随机推荐

  1. [.NET领域驱动设计实战系列]专题五:网上书店规约模式、工作单元模式的引入以及购物车的实现

    一.前言 在前面2篇博文中,我分别介绍了规约模式和工作单元模式,有了前面2篇博文的铺垫之后,下面就具体看看如何把这两种模式引入到之前的网上书店案例里. 二.规约模式的引入 在第三专题我们已经详细介绍了 ...

  2. STC12C5A60S2笔记1(管脚定义)

    STC12C5A60S2管脚定义 管脚1:标准IO口P1.0.ADC0 模数转换通道0.CLKOUT2 波特率发生器的时钟输出 管脚2:标准IO口P1.1.ADC1 模数转换通道1 管脚3:标准IO口 ...

  3. C#中的线程二(Cotrol.BeginInvoke和Control.Invoke)

    C#中的线程二(Cotrol.BeginInvoke和Control.Invoke) 原文地址:http://www.cnblogs.com/whssunboy/archive/2007/06/07/ ...

  4. [ACM_几何] Pipe

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28417#problem/B     本题大意: 给定一个管道上边界的拐点,管道宽为1,求 ...

  5. iOS——自定义Segue实现总结

    在阅读了iOS 8自定义动画转场上手指南后,刚开始不理解,后来慢慢消化了,现在总结如下: 1. 自定义Segue关键在于继承UIStoryboardSegue并重写perform方法 2. 动画可以在 ...

  6. Unity3D核心类型一览

    Unity3D核心类型一览 本文记录了Unity3D的最基本的核心类型.包括Object.GameObject.Component.Transform.Behaviour.Renderer.Colli ...

  7. 三天学会HTML5——SVG和Canvas的使用

    在第一天学习了HTML5的一些非常重要的基本知识,今天将进行更深层学习 首先来回顾第一天学习的内容,第一天学习了新标签,新控件,验证功能,应用缓存等内容. 第2天将学习如何使用Canvas 和使用SV ...

  8. Visual Studio 2015速递(3)——ASP.NET 新特性

    系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...

  9. thinkphp里的session、cookie方法

    thinkphp里,对于session和cookie的操作,不管是存值.获取.删除,均只有一个方法.现分享出来,供大家参考参考. /** * session管理函数 * @param string|a ...

  10. scp命令[转]

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...