ajax+php超時操作,延時返回資料
阿新 • • 發佈:2019-01-25
在一次微信掃碼登入中,為了減少ajax的請求次數研究了一下,ajax中的timeout的應用,
js程式碼如下:
var dataarr = { type: "POST", url: "__MODULE__/System/CheckUserWx", timeout:65000, //ajax請求超時時間65秒 data:{uid:'<{$uid}>',rand:'<{$rand}>'},//60秒後無論結果伺服器都返回資料 success:function(res) { if(res.bool){ $('#info').html('<i class="Hui-iconfont c-success f-20"></i> 繫結成功!'); var t= setTimeout('layer_close()',1000); }else{ $.ajax(dataarr); } }, // Ajax請求超時,繼續查詢 error: function(XMLHttpRequest, textStatus, errorThrown) { if (textStatus == "timeout") { $.ajax(dataarr);// Ajax請求超時,繼續查詢 } } }; $.ajax(dataarr);
PHP端的程式碼:
//檢測微信繫結情況 public function CheckUserWx(){ $res['bool'] = false; if(IS_POST){ $rand = I('post.rand'); $uid = I('post.uid'); $i = 0; while(true){ usleep(500000);//暫停5s $i++; //獲取資料 $rand = M('WechatRand')->where(array('rand'=>$rand))->find(); if($rand['openid']){ $arr['uid'] = $uid; $arr['openid'] = $rand['openid']; $b = M('users')->save($arr); if($b !== false){//有值就返回資料 M('WechatRand')->delete($rand['id']); $res['bool'] = true; $user = M('users')->find($uid); $this->action('繫結微信!'); $wx = new \Wechat\Controller\SendMsgController(); $wx->BD_user_wx($rand['openid'],$user['username']); $this-> ajaxReturn($res,'JSON'); break; } } if($i > 20){//檢測超過20次返回錯誤 $res['bool'] = false; $this->ajaxReturn($res,"JSON"); break; } } } }
服務端每5s檢測一次資料,如果有資料就返回。