原因是这样的:今天在做Ajax信息传递的时候,使用了上文说到的信息分类的收集办法,将不同的信息用text、json和xml三种方式传到服务器。
问题就在这里,怎么收集这个状态并将它呈现给客户端呢,我首先想到的是给每一个完成的Ajax事件添加状态字符串,最后用字符串判定的方法来收集所有完成的状态,事实上,这个方法是可行的。但是我忽略了一点,那就是JavaScript的执行并不会顾及Ajax的状态,在所有的状态字符串还没有来得及回传改变时,程序就执行了字符串判定的方法来收集所有完成的状态的函数,结果当然是所有的请求都出错了,因为没有零延时的Ajax请求。
我开始把多个Ajax请求串联起来,即一个执行成功之后再执行另一个,问题又出现了,因为我设计的Ajax的并发的,就是说就算第一个没有值不发生Ajax请求,第二个也要发生。这里当然就有问题了,只要一个出错或者空值不发生,别的就都不会请求了。
路漫漫其修远兮,我开始收集别的办法,回到原点,重新思考,最后想到用JavaScript的时钟方法,每隔半秒收集一次信息,直到所有的状态字符串都成功为止,当然也有超时的时间.下面贴出解决的代码,代码不怎么高级,希望给大家一个解决办法的思想:
状态字符串的声明:
//监测返回的值 var tp_suc="sb"; var tm_suc="sb"; var xx_suc="sb";
时钟状态的收集:
//收集信息,知道Ajax返回成功为止 var sec=0; var time1=setInterval(function(){ if(tp_suc!="suc"&&tm_suc!="suc"&&xx_suc!="suc"){sec++;if(sec>60){alert("响应超时");}} else { $("#img").hide(); $("#re_suc").show(); clearInterval(time1); } }, 500);//setInterval
菜鸟拙见,欢迎指正讨论!
浙公网安备 33010602011771号