Ajax在請(qǐng)求過程中顯示進(jìn)度的簡單實(shí)現(xiàn)
Ajax在Web應(yīng)用中使用得越來越頻繁。在進(jìn)行Ajax調(diào)用過程中一般都具有這樣的做法:顯示一個(gè)GIF圖片動(dòng)畫表明后臺(tái)正在工作,同時(shí)阻止用戶操作本頁面(比如Ajax請(qǐng)求通過某個(gè)按鈕觸發(fā),用戶不能頻繁點(diǎn)擊該按鈕產(chǎn)生多個(gè)并發(fā)Ajax請(qǐng)求);調(diào)用完成后,圖片消失,當(dāng)前頁面運(yùn)行重新編輯。以下圖為例,頁面中通過一個(gè)Load鏈接以Ajax請(qǐng)求的方式加載數(shù)據(jù)(左)。當(dāng)用戶點(diǎn)擊該鏈接之后,Ajax請(qǐng)求開始,GIF圖片顯示“Loading“狀態(tài),同時(shí)當(dāng)前頁面被“罩住”防止用戶繼續(xù)點(diǎn)擊Load按鈕(中);Ajax請(qǐng)求完成被返回響應(yīng)的結(jié)果,結(jié)果被呈現(xiàn)出來的同時(shí),GIF圖片和“遮罩”同時(shí)消失(右)。

在這里我同樣以ASP.NET MVC應(yīng)用為例,提供一種簡單的實(shí)現(xiàn)方式。我們GIF圖片和作為遮罩的<div>定義在布局文件中,并為它們定制了相應(yīng)的CSS。其中GIF和遮罩<div>的z-index分別設(shè)置為2000和1000(這個(gè)任意,只要能夠讓遮罩的<div>遮住當(dāng)前頁面,GIF圖片顯示在最上層即可)。后者通過設(shè)置position、top、bottom、left和right是它可以遮住整個(gè)頁面,并且將其背景設(shè)置為黑色。
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
<style type="text/css">
.hide{displaynone }
.progress{z-index }
.mask{position fixed;top ;right ;bottom ;left ; z-index ; background-color #}
</style>
...
</head>
<body>
<div>@RenderBody()</div>
<img id="progressImgage" class="progress hide" alt="" src="@Url.Content("~/Images/ajax-loader.gif")"/>
<div id="maskOfProgressImage" class="mask hide"></div>
</body>
</html>
然后我們通過如下的代碼為jQuery定義了另一個(gè)實(shí)現(xiàn)Ajax調(diào)用的方法ajax2,該方法依然調(diào)用$.ajax(options)實(shí)現(xiàn)Ajax調(diào)用。在ajax2方法中我們將options參數(shù)complete屬性進(jìn)行了“封裝”,讓可以將顯示出來的GIF圖片和遮罩<div>隱藏起來。同時(shí)覆蓋了options的async屬性,是之總是以異步方式執(zhí)行,因?yàn)橹挥羞@樣瀏覽器才不能被鎖住,GIF也才能正常顯示。在調(diào)用$.ajax(options)進(jìn)行Ajax請(qǐng)求之前,我們將GIF圖片和遮罩<div>顯示出來,并且將其定位在正中央。遮罩<div>的透明度進(jìn)行了相應(yīng)設(shè)置,所以會(huì)出現(xiàn)上圖(中)的效果。
<!DOCTYPE html>
<html>
<head>
...
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-...min.js")"></script>
<script type="text/javascript">
$(function () {
$.ajax = function (options) {
var img = $("#progressImgage");
var mask = $("#maskOfProgressImage");
var complete = options.complete;
options.complete = function (httpRequest, status) {
img.hide();
mask.hide();
if (complete) {
complete(httpRequest, status);
}
};
options.async = true;
img.show().css({
"position" "fixed",
"top" "%",
"left" "%",
"margin-top" function () { return - * img.height() / ; },
"margin-left" function () { return - * img.width() / ; }
});
mask.show().css("opacity", ".");
$.ajax(options);
};
});
</script>
</head>
...
</html>
那么現(xiàn)在進(jìn)行Ajax調(diào)用的時(shí)候只需要調(diào)用$.ajax2就可以,如下所示的是實(shí)例中“Load”鏈接的click事件的注冊代碼:
<a href="#" id="load">Load</a>
<div id="result"></div>
<script type="text/javascript">
$("#load").click(function () {
$.ajax ({
url '@Url.Action("GetContacts")',
success function(result)
{
$("#result").html(result);
}
});
});
</script>
相關(guān)文章
Ajax請(qǐng)求內(nèi)嵌套Ajax請(qǐng)求示例代碼
把全國省市的兩個(gè)XML文件整合成一個(gè)JSON格式的數(shù)據(jù),就想到了用Ajax嵌套的方法來解決,查找資料,加個(gè)async:false這個(gè)Ajax參數(shù)就行了2014-08-08
利用AjaxControlToolkit實(shí)現(xiàn)百度搜索時(shí)的下拉列表提示詳細(xì)步驟
AjaxControlToolkit是一組控件的集合,可以實(shí)現(xiàn)自動(dòng)補(bǔ)充文本框,點(diǎn)擊文本框彈出日歷,加水印等Ajax效果等等,感興趣的朋友可以了解下啊,或許本文對(duì)你學(xué)習(xí)ajax有所幫助2013-02-02
Ajax中通過JS代碼自動(dòng)獲取表單元素值的示例代碼
如果表單元素不多的情況我們常常會(huì)通過GET方式來獲取表單元素值,但如果表單元素非常多,此時(shí)就需要用POST方式來獲取表單元素值,那么如何來獲取表單元素值呢2014-09-09
ajax提交數(shù)據(jù)到后臺(tái)php接收(實(shí)現(xiàn)方法)
下面小編就為大家?guī)硪黄猘jax提交數(shù)據(jù)到后臺(tái)php接收(實(shí)現(xiàn)方法)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
AJax 把拿到的后臺(tái)數(shù)據(jù)在頁面中渲染的實(shí)例
今天小編就為大家分享一篇AJax 把拿到的后臺(tái)數(shù)據(jù)在頁面中渲染的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08

