日期:2014-05-16  浏览次数:20651 次

有关ajax的造成的并发问题

有关ajax的造成的并发问题,今天同事写了一段ajax调用服务器端的问题,在js中for循环调用ajax异步加载,但是造成的是同样的数据可能会有部分数据卖不掉。后来总结出来的原因是ajax造成的异步加载的过程中形成多线程,从而在update操作的时候,有可能会重复update,从而返回的return[]就是false。从而造成了这个整个的卖菜一系列操作没有完成,从而没有卖出。没有去执行update操作,因为符合条件的已经被update过了,所以return是没有值的,所有return[]也就会出现了false的情况,从而接下来的操作就终止了。

????解决方案,就是不要多次在客户端js多次请求服务器端,需要把操作的seq拼成一个字符一同传递到php脚本中,让其一个线程进行,从而不会造成多线程的问题。因为PHP中for循环代码,肯定是执行完1再去2然后3...,而JS中是要多线程异步请求多线程并发,有可能造成操作丢失的状况。

????以后需要多加注意,当使用批量操作的时候,必须都要在PHP端完成,不要在客户端JS中循环使用ajax异步加载。

解决方案就是把需要更新的数据组成一个字符串,也就是一条据,用ajax去请求一次,然后在php短处理传过来复杂的数据。

如下图,是错误的代码 ?和 ? 修改后的代码:


?