摘要:作為一個(gè)老前端,本案例是基于來(lái)寫的。前端渲染頁(yè)面拿數(shù)據(jù),無(wú)非就是,其他的暫時(shí)沒有用過,但項(xiàng)目還是使用比較多。不管或都會(huì)執(zhí)行代碼就到這里了,
作為一個(gè)老前端,本案例是基于jquery來(lái)寫的。
前端渲染頁(yè)面拿數(shù)據(jù),無(wú)非就是ajax、socket,其他的暫時(shí)沒有用過,但項(xiàng)目還是使用ajax比較多。
下面來(lái)看一下一個(gè)簡(jiǎn)單基于ajax短輪詢的請(qǐng)求
function req() { $.ajax({ type: "get", url: "demo.php", dataType: "json", success: function(res) { console.log(res); }, error: function() { console.log("請(qǐng)求失敗~"); } }); } req(); setInterval(req, 3000);
如果網(wǎng)速快而穩(wěn)定的話,可以這樣使用,但網(wǎng)速誰(shuí)能確定呢,如果網(wǎng)速不穩(wěn)定的話,請(qǐng)求一個(gè)接口需要5~10秒,這樣就會(huì)造成ajax請(qǐng)求堆積,近而引發(fā)不可估量的問題,那么怎樣去避免這個(gè)問題呢?
方式一:給請(qǐng)求賦上一個(gè)變量,然后每次輪詢先abort掉上一個(gè)請(qǐng)求
var ajaxReq = null; function req(isLoading) { if(ajaxReq !== null) { ajaxReq.abort(); ajaxReq = null; } ajaxReq = $.ajax({ type: "get", url: "demo.php", dataType: "json", beforeSend: function() { if(isLoading) { $(".zh-loading").show(); } }, success: function(res) { console.log(res); }, complete: function() { if(isLoading) { $(".zh-loading").hide(); } }, error: function() { console.log("請(qǐng)求失敗~"); } }); } req(true); setInterval(function() { req(false); }, 3000);
猛一看,感覺還行,差不多就OK了,但作為前端的我們要不斷的去尋找更合適的方式,所以有個(gè)下面這個(gè)。
方式二:每一次輪詢都判斷上一次請(qǐng)求是否完成,完成了才會(huì)執(zhí)行下一次的請(qǐng)求(推薦)
var isLoaded = false; function req(opts) { $.ajax({ type: "get", url: "demo.php", dataType: "json", beforeSend: function() { if(opts.init === 1) { $(".zh-loading").show(); } isLoaded = false; }, success: function(res) { console.log(res); }, complete: function() { if(opts.init === 1) { $(".zh-loading").hide(); } isLoaded = true; }, error: function() { console.log("請(qǐng)求失敗~"); } }); } req({"init": 1}); setInterval(function() { isLoaded && req({"init": 0}); }, 3000);
上面的 isLoaded && req({"init": 0}); 表示前面一個(gè)條件正確,則執(zhí)行&&后面的方法
正常的寫法是
if(isLoaded) req({"init": 0});
另外注意一點(diǎn):isLoaded=true 要在complete里加,如果只在success里加的話, 請(qǐng)求失敗了就不會(huì)輪詢?cè)僬?qǐng)求了。complete不管success或error都會(huì)執(zhí)行
代碼就到這里了,thank you for attention~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89263.html
摘要:顯示實(shí)時(shí)刷新的內(nèi)容頁(yè)面。存儲(chǔ)文本數(shù)據(jù)。更新插入數(shù)據(jù)。首先呢,要有發(fā)送請(qǐng)求并顯示遞歸調(diào)用先執(zhí)行一次然后通過和關(guān)聯(lián)起來(lái)。是一個(gè)空文件,你只需要用記事本,新建一個(gè),用來(lái)存放表單提交過去的數(shù)據(jù),也就是說,其實(shí)就是一個(gè)數(shù)據(jù)庫(kù)。 也不多,就4個(gè)文件。ajax.html - 顯示實(shí)時(shí)刷新的內(nèi)容頁(yè)面。chat.php - 處理數(shù)據(jù)。data.dat - 存儲(chǔ)文本數(shù)據(jù)。update.php - 更新/插...
摘要:顯示實(shí)時(shí)刷新的內(nèi)容頁(yè)面。存儲(chǔ)文本數(shù)據(jù)。更新插入數(shù)據(jù)。首先呢,要有發(fā)送請(qǐng)求并顯示遞歸調(diào)用先執(zhí)行一次然后通過和關(guān)聯(lián)起來(lái)。是一個(gè)空文件,你只需要用記事本,新建一個(gè),用來(lái)存放表單提交過去的數(shù)據(jù),也就是說,其實(shí)就是一個(gè)數(shù)據(jù)庫(kù)。 也不多,就4個(gè)文件。ajax.html - 顯示實(shí)時(shí)刷新的內(nèi)容頁(yè)面。chat.php - 處理數(shù)據(jù)。data.dat - 存儲(chǔ)文本數(shù)據(jù)。update.php - 更新/插...
摘要:顯示實(shí)時(shí)刷新的內(nèi)容頁(yè)面。存儲(chǔ)文本數(shù)據(jù)。更新插入數(shù)據(jù)。首先呢,要有發(fā)送請(qǐng)求并顯示遞歸調(diào)用先執(zhí)行一次然后通過和關(guān)聯(lián)起來(lái)。是一個(gè)空文件,你只需要用記事本,新建一個(gè),用來(lái)存放表單提交過去的數(shù)據(jù),也就是說,其實(shí)就是一個(gè)數(shù)據(jù)庫(kù)。 也不多,就4個(gè)文件。ajax.html - 顯示實(shí)時(shí)刷新的內(nèi)容頁(yè)面。chat.php - 處理數(shù)據(jù)。data.dat - 存儲(chǔ)文本數(shù)據(jù)。update.php - 更新/插...
摘要:各瀏覽器都有自己的關(guān)于最大長(zhǎng)度的限制谷歌火狐超過限制長(zhǎng)度的部分,瀏覽器會(huì)自動(dòng)截取掉,導(dǎo)致傳遞給服務(wù)器的數(shù)據(jù)缺失。 AJAX基礎(chǔ)知識(shí)及核心原理解讀 AJAX基礎(chǔ)知識(shí) 什么是AJAX?async javascript and xml,異步的JS和XML xml:可擴(kuò)展的標(biāo)記語(yǔ)言 作用是用來(lái)存儲(chǔ)數(shù)據(jù)的(通過自己擴(kuò)展的標(biāo)記名稱清晰的展示出數(shù)據(jù)結(jié)構(gòu))ajax之所以稱為異步的js和xml,主要原因...
摘要:掃碼進(jìn)入表單頁(yè)面,然后提交表單,接收頁(yè)面就會(huì)立馬刷新,不用刷新瀏覽器就會(huì)顯示是不是發(fā)現(xiàn)省了很多事,不用登錄微信就可以在線傳輸文本。 我們知道,手機(jī)傳輸本文到電腦比較簡(jiǎn)單的方法是在電腦登錄微信或者QQ,然后發(fā)過去就得了,但是有些人又很懶很懶,懶到連登錄微信和QQ都不想登錄,那么該怎么做呢? 我開發(fā)這款小工具其實(shí)就可以解決問題,但是目前只支持傳輸文本,圖片視頻那些都還沒開發(fā)。只需要在電腦打...
閱讀 1374·2021-09-02 10:19
閱讀 1112·2019-08-26 13:25
閱讀 2120·2019-08-26 11:37
閱讀 2427·2019-08-26 10:18
閱讀 2686·2019-08-23 16:43
閱讀 3034·2019-08-23 16:25
閱讀 788·2019-08-23 15:53
閱讀 3312·2019-08-23 15:11