資源描述:
《基于jquery,php實現(xiàn)ajax長輪詢(longpoll)》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、HTTP是無狀態(tài)、單向的協(xié)議,用戶只能夠通過客服端向服務器發(fā)送請求并由服務器處理發(fā)回一個響應。若要實現(xiàn)聊天室、WEBQQ、在線客服、郵箱等這些即時通訊的應用,就要用到“服務器推送技術(Comet)”。傳統(tǒng)的AJAX輪詢方式,客服端以用戶定義的時間間隔去服務器上查詢最新的數據。種這種拉取數據的方式需要很短的時間間隔才能保證數據的精確度,但太短的時間間隔客服端會對服務器在短時間內發(fā)送出多個請求。反轉AJAX,就是所謂的長輪詢或者COMET。服務器與客服端需要保持一條長時間的請求,它使得服務器在有數據時可以返回消息給客戶端。html:v
2、iewplaincopytoclipboardprint?1.
??2.
??javascript:這里使用AJAX請求data.php頁面獲得‘success’的值,請求的時間達到80秒。在這80秒中若沒有從服務端返回‘success’則一直保持連接狀態(tài),直到有數據返回或‘success’的值為0才關閉連接。在關閉連接后在繼續(xù)下一次的請求。viewplaincopytoclipboardprint?1.$(f
3、unction(){??2.??3.??4.????$("#btn").bind("click",{btn:$("#btn")},function(evdata){??5.?????????$.ajax({??6.????????????????type:"POST",??7.????????????????dataType:"json",??8.????????????????url:"data.php",??9.????????????????timeout:80000,?????//ajax請求超時時間80秒??10.???
4、?????????????data:{time:"80"},?//40秒后無論結果服務器都返回數據??11.????????????????success:function(data,textStatus){??12.????????????????????//從服務器得到數據,顯示數據并繼續(xù)查詢??13.????????????????????if(data.success=="1"){??14.?????????????????????$("#msg").append("
[有數據]"+data.text);??15.?
5、????????????????????evdata.data.btn.click();??1.????????????????????}??2.?????????????????//未從服務器得到數據,繼續(xù)查詢??3.????????????????????if(data.success=="0"){??4.????????????????????$("#msg").append("
[無數據]");??5.????????????????????evdata.data.btn.click();??6.??????????
6、??????????}??7.????????????????},??8.?????????????//Ajax請求超時,繼續(xù)查詢??9.?????????????error:function(XMLHttpRequest,textStatus,errorThrown){??10.?????????????????????if(textStatus=="timeout"){??11.?????????????????????????$("#msg").append("
[超時]");??12.????????????????
7、?????????evdata.data.btn.click();??13.?????????????????????}??14.?????????????}??15.??????????????????16.????????????});??17.????});??18.??????19.});??PHP:在這里是無限的循環(huán),循環(huán)的結束條件就是獲取到了返回結果返回Json數據。并且接受$_POST['time']參數來限制循環(huán)的超時時間,避免資源的過度浪費。(瀏覽器關閉不會發(fā)消息給服務器,使用可能一直循環(huán)下去)viewplain
8、copytoclipboardprint?1.if(empty($_POST['time']))exit();??2.set_time_limit(0);//無限請求超時時間??3.$i=0;??4.while?(true){??5.????//s