當前位置:首頁 » 服務存儲 » ajax存儲狀態
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

ajax存儲狀態

發布時間: 2022-08-17 05:37:08

㈠ ajax是什麼東西

術語Ajax用來描述一組技術,它使瀏覽器可以為用戶提供更為自然的瀏覽體驗。在Ajax之前,Web站點強制用戶進入提交/等待/重新顯示範例,用戶的動作總是與伺服器的「思考時間」同步。Ajax提供與伺服器非同步通信的能力,從而使用戶從請求/響應的循環中解脫出來。藉助於Ajax,可以在用戶單擊按鈕時,使用JavaScript和DHTML立即更新UI,並向伺服器發出非同步請求,以執行更新或查詢資料庫。當請求返回時,就可以使用JavaScript和CSS來相應地更新UI,而不是刷新整個頁面。最重要的是,用戶甚至不知道瀏覽器正在與伺服器通信:Web站點看起來是即時響應的。

雖然Ajax所需的基礎架構已經出現了一段時間,但直到最近非同步請求的真正威力才得到利用。能夠擁有一個響應極其靈敏的Web站點確實激動人心,因為它最終允許開發人員和設計人員使用標準的HTML/CSS/JavaScript堆棧創建「桌面風格的(desktop-like)」可用性。

通常,在J2EE中,開發人員過於關注服務和持久性層的開發,以至於用戶界面的可用性已經落後。在一個典型的J2EE開發周期中,常常會聽到這樣的話,「我們沒有可投入UI的時間」或「不能用HTML實現」。但是,以下Web站點證明,這些理由再也站不住腳了:

BackPack
Google Suggest
Google Maps
PalmSphere
所有這些Web站點都告訴我們,Web應用程序不必完全依賴於從伺服器重新載入頁面來向用戶呈現更改。一切似乎就在瞬間發生。簡而言之,在涉及到用戶界面的響應靈敏度時,基準設得更高了。

定義Ajax

Adaptive Path公司的Jesse James Garrett這樣定義Ajax:

Ajax不是一種技術。實際上,它由幾種蓬勃發展的技術以新的強大方式組合而成。Ajax包含:

基於XHTML和CSS標準的表示;
使用Document Object Model進行動態顯示和交互;
使用XMLHttpRequest與伺服器進行非同步通信;
使用JavaScript綁定一切。
這非常好,但為什麼要以Ajax命名呢?其實術語Ajax是由Jesse James Garrett創造的,他說它是「Asynchronous JavaScript + XML的簡寫」。

Ajax的工作原理

Ajax的核心是JavaScript對象XmlHttpRequest。該對象在Internet Explorer 5中首次引入,它是一種支持非同步請求的技術。簡而言之,XmlHttpRequest使您可以使用JavaScript向伺服器提出請求並處理響應,而不阻塞用戶。

在創建Web站點時,在客戶端執行屏幕更新為用戶提供了很大的靈活性。下面是使用Ajax可以完成的功能:

動態更新購物車的物品總數,無需用戶單擊Update並等待伺服器重新發送整個頁面。
提升站點的性能,這是通過減少從伺服器下載的數據量而實現的。例如,在Amazon的購物車頁面,當更新籃子中的一項物品的數量時,會重新載入整個頁面,這必須下載32K的數據。如果使用Ajax計算新的總量,伺服器只會返回新的總量值,因此所需的帶寬僅為原來的百分之一。
消除了每次用戶輸入時的頁面刷新。例如,在Ajax中,如果用戶在分頁列表上單擊Next,則伺服器數據只刷新列表而不是整個頁面。
直接編輯表格數據,而不是要求用戶導航到新的頁面來編輯數據。對於Ajax,當用戶單擊Edit時,可以將靜態表格刷新為內容可編輯的表格。用戶單擊Done之後,就可以發出一個Ajax請求來更新伺服器,並刷新表格,使其包含靜態、只讀的數據。
一切皆有可能!但願它能夠激發您開始開發自己的基於Ajax的站點。然而,在開始之前,讓我們介紹一個現有的Web站點,它遵循傳統的提交/等待/重新顯示的範例,我們還將討論Ajax如何提升用戶體驗。

Ajax可用於那些場景?——一個例子:MSN Money頁面

前幾天,在瀏覽MSN Money頁面的時候,有一篇關於房地產投資的文章引起了我的好奇心。我決定使用站點的「Rate this article」(評價本文)功能,鼓勵其他的用戶花一點時間來閱讀這篇文章。在我單擊vote按鈕並等待了一會兒之後,整個頁面被刷新,在原來投票問題所在的地方出現了一個漂亮的感謝畫面。

而Ajax能夠使用戶的體驗更加愉快,它可以提供響應更加靈敏的UI,並消除頁面刷新所帶來的閃爍。目前,由於要刷新整個頁面,需要傳送大量的數據,因為必須重新發送整個頁面。如果使用Ajax,伺服器可以返回一個包含了感謝信息的500位元組的消息,而不是發送26,813位元組的消息來刷新整個頁面。即使使用的是高速Internet,傳送26K和1/2K的差別也非常大。同樣重要的是,只需要刷新與投票相關的一小節,而不是刷新整個屏幕。

讓我們利用Ajax實現自己的基本投票系統。

原始的Ajax:直接使用XmlHttpRequest

如上所述,Ajax的核心是JavaScript對象XmlHttpRequest。下面的示例文章評價系統將帶您熟悉Ajax的底層基本知識:http://tearesolutions.com/ajax-demo/raw-ajax.html。註:如果您已經在本地WebLogic容器中安裝了ajax-demo.war,可以導航到http://localhost:7001/ajax-demo/raw-ajax.html,

瀏覽應用程序,參與投票,並親眼看它如何運轉。熟悉了該應用程序之後,繼續閱讀,進一步了解其工作原理細節。

首先,您擁有一些簡單的定位點標記,它連接到一個JavaScriptcastVote(rank)函數。 function castVote(rank) {
var url = "/ajax-demo/static-article-ranking.html";
var callback = processAjaxResponse;
executeXhr(callback, url);
}
該函數為您想要與之通信的伺服器資源創建一個URL並調用內部函數executeXhr,提供一個回調JavaScript函數,一旦伺服器響應可用,該函數就被執行。由於我希望它運行在一個簡單的Apache環境中,「cast vote URL」只是一個簡單的HTML頁面。在實際情況中,被調用的URL將記錄票數並動態地呈現包含投票總數的響應。

下一步是發出一個XmlHttpRequest請求: function executeXhr(callback, url) {
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = callback;
req.open("GET", url, true);
req.send(null);
} // branch for IE/Windows ActiveX version
else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = callback;
req.open("GET", url, true);
req.send();
}
}
}

如您所見,執行一個XmlHttpRequest並不簡單,但非常直觀。和平常一樣,在JavaScript領域,大部分的工作量都花在確保瀏覽器兼容方面。在這種情況下,首先要確定XmlHttpRequest是否可用。如果不能用,很可能要使用Internet Explorer,這樣就要使用所提供的ActiveX實現。

executeXhr()方法中最關鍵的部分是這兩行:

req.onreadystatechange = callback;
req.open("GET", url, true);
第一行定義了JavaScript回調函數,您希望一旦響應就緒它就自動執行,而req.open()方法中所指定的「true」標志說明您想要非同步執行該請求。

一旦伺服器處理完XmlHttpRequest並返回給瀏覽器,使用req.onreadystatechange指派所設置的回調方法將被自動調用。 function processAjaxResponse() {
// only if req shows "loaded"
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
502 502'votes').innerHTML = req.responseText;
} else {
alert("There was a problem retrieving the XML data:
" +
req.statusText);
}
}
}
該代碼相當簡潔,並且使用了幾個幻數,這使得難以一下子看出發生了什麼。為了弄清楚這一點,下面的表格(引用自http://developer.apple.com/internet/webcontent/xmlhttpreq.html)列舉了常用的XmlHttpRequest對象屬性。

屬性
描述

onreadystatechange
每次狀態改變所觸發事件的事件處理程序

readyState
對象狀態值:

0 = 未初始化(uninitialized)
1 = 正在載入(loading)
2 = 載入完畢(loaded)
3 = 交互(interactive)
4 = 完成(complete)

responseText
從伺服器進程返回的數據的字元串形式

responseXML
從伺服器進程返回的DOM兼容的文檔數據對象

status
從伺服器返回的數字代碼,比如404(未找到)或200(就緒)

statusText
伴隨狀態碼的字元串信息

現在processVoteResponse()函數開始顯示出其意義了。它首先檢查XmlHttpRequest的整體狀態以保證它已經完成(readyStatus == 4),然後根據伺服器的設定詢問請求狀態。如果一切正常(status == 200),就使用innerHTML屬性重寫DOM的「votes」節點的內容。

既然您親眼看到了XmlHttpRequest對象是如何工作的,就讓我們利用一個旨在簡化JavaScript與Java應用程序之間的非同步通信的框架來對具體的細節進行抽象。

Ajax: DWR方式

按照與文章評價系統相同的流程,我們將使用Direct Web Remoting(DWR)框架實現同樣的功能。

假定文章和投票結果存儲在一個資料庫中,使用某種對象/關系映射技術來完成抽取工作。為了部署起來盡可能地簡單,我們不會使用資料庫進行持久性存儲。此外,為使應用程序盡可能通用,也不使用Web框架。相反,應用程序將從一個靜態HTML文件開始,可以認為它由伺服器動態地呈現。除了這些簡化措施,應用程序還應該使用Spring Framework關聯一切,以便輕松看出如何在一個「真實的」應用程序中使用DWR。

現在應該下載示例應用程序並熟悉它。該應用程序被壓縮為標準的WAR文件,因此您可以把它放置到任何一個Web容器中——無需進行配置。部署完畢之後,就可以導航到http://localhost:7001/ajax_demo/dwr-ajax.html來運行程序。

可以查看HTML 源代碼,了解它如何工作。給人印象最深的是,代碼如此簡單——所有與伺服器的交互都隱藏在JavaScript對象ajaxSampleSvc的後面。更加令人驚訝的是,ajaxSampleSvc服務不是由手工編寫而是完全自動生成的!讓我們繼續,看看這是如何做到的。

引入DWR

如同在「原始的Ajax」一節所演示的那樣,直接使用XmlHttpRequest創建非同步請求非常麻煩。不僅JavaScript代碼冗長,而且必須考慮伺服器端為定位Ajax請求到適當的服務所需做的工作,並將結果封送到瀏覽器。

設計DWR的目的是要處理將Web頁面安裝到後端服務上所需的所有信息管道。它是一個Java框架,可以很輕松地將它插入到Web應用程序中,以便JavaScript代碼可以調用伺服器上的服務。它甚至直接與Spring Framework集成,從而允許用戶直接向Web客戶機公開bean。

DWR真正的巧妙之處是,在用戶配置了要向客戶機公開的服務之後,它使用反射來生成JavaScript對象,以便Web頁面能夠使用這些對象來訪問該服務。然後Web頁面只需接合到生成的JavaScript對象,就像它們是直接使用服務一樣;DWR無縫地處理所有有關Ajax和請求定位的瑣碎細節。

㈡ 點擊按鈕,應用ajax技術,在後台執行 資料庫存儲操作的問題!

你通過js來實現咯
先取完值,然後通過 xmlhttp.open("GET","內容",true);

不知道你是不是經過servlet處理的。如果是的話,
內容後面加個變數不就可以了
假設
var value=document.getElementById(txtName).value
xmlhttp.open("Get","regist?action='exists' & value="+value,true);

㈢ 描述一次完整的Ajax請求過程。

AJAX運行過程中5種狀態:

0 - (未初始化)還沒有調用send()方法,

1 - (載入)已調用send()方法,正在發送請求,

2 - (載入完成)send()方法執行完成,

3 - (交互)正在解析響應內容,

4 - (完成)響應內容解析完成,可以在客戶端調用了。

㈣ ajax有哪幾種狀態呢

success error 這是基本的 成功和失敗的返回, 其他的可以根據業務邏輯封裝

㈤ 怎麼通過ajax將數據存儲到資料庫中

$.ajax({
type:'POST',url:'submitcomment.php',timeout:2000,cache:true,
data:'dataid='+dataid+'&appid='+appid+'&name='+name.val()+'&txt='+txt.val()+'&openid='+openid,
error:function(msg){return false},
success:function(json, st){
if(json.result == 0){
alert('您的評論審核通過後,才會顯示出來!');
}else{ //否則審核通過,顯示出來
$("#comlistx0014jwh62k").html(json);
}
}
});

後台submitcomment.php代碼:

<?php

include("connect.php");//連接資料庫文件
echo '<pre>',var_mp($_REQUEST['appid']),'</pre>';
echo '<pre>',var_mp($_REQUEST['name']),'</pre>';
die();

//mysql_query("INSERT INTO biao(name,txt) VALUES ('$_POST["name"]','$_POST["txt"]');

㈥ ajax獲取的數據,怎麼存儲在頁面

你可以使用HTML的data-* 屬性。也可以在取到數據時,把數據就全部追加到頁面上,再設置這些數據的標簽為隱藏,根據下拉框來顯示。方法有很多種的。

㈦ Ajax頁面狀態如何

當網站是全靜態的html頁面時,而又希望網站會員在登錄之後並在所有頁面頭部顯示登錄狀態,如用戶名等,如果未登錄就是未登錄狀態,下面給大家來分享實現的方法。

一、在html靜態頁面中加入div,並指定ID

如:
<div id="ajaxlogin"></div>
二、新建一個動態的ajaxlogin.php文件,用來判斷用戶是否登錄了

代碼如下:
<? session_start(); if( $_SESSION['u_login']=='turelogin' ) { echo '在這里顯示你要在html頁面中的ajaxlogin中顯示的內容了'; } else { echo '顯示在ajaxlogin div中未登錄的提示信息'; } ?>
三、好了現在html頁面與php都做了,我們利用jquery+ajax 中的load來實例,在靜態頁面底部加入代碼:

源碼列印幫助
<script src="/js/v2/jquery-1.8.0.min.js" language="javascript" type="text/javascript"></script> <script> $('#ajaxlogin').load('ajaxlogin.php?a='+Math.random()); </script>
代碼需放在ajaxlogin後面,千萬不能放在ajaxlogin之前,否則會載入失敗,這樣我們的html頁面實時登錄信息就完成了。

㈧ web前端利用ajax怎樣儲存用戶登錄的信息

應該會。Cookie,有時也用其復數形式Cookies,指某些網站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(通常經過加密)。Cookie是由伺服器端生成,發送給User-Agent(一般是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給伺服器(前提是瀏覽器設置為啟用cookie)。Cookie名稱和值可以由伺服器端開發自己定義,對於JSP而言也可以直接寫入jsessionid,這樣伺服器可以知道該用戶是否合法用戶以及是否需要重新登錄等。

㈨ 什麼叫AJAX技術

什麼是Ajax

http://tech.163.com/school · 2005-09-08 17:36:55 ·
Ajax的定義

Ajax不是一個技術,它實際上是幾種技術,每種技術都有其獨特這處,合在一起就成了一個功能強大的新技術。Ajax包括:

XHTML和CSS
使用文檔對象模型(Document Object Model)作動態顯示和交互
使用XML和XSLT做數據交互和操作
使用XMLHttpRequest進行非同步數據接收
使用JavaScript將它們綁定在一起

傳統的web應用模型工作起來就象這樣:大部分界面上的用戶動作觸發一個連接到Web伺服器的HTTP請求。伺服器完成一些處理---接收數據,處理計算,再訪問其它的資料庫系統,最後返回一個HTML頁面到客戶端。這是一個老套的模式,自採用超文本作為web使用以來,一直都這樣用, 但看過《The Elements of User Experience》的讀者一定知道,是什麼限制了Web界面沒有桌面軟體那麼好用。

圖1: 傳統Web應用模型(左)與Ajax模型的比較(右).

這種舊的途徑讓我們認識到了許多技術,但它不會產生很好的用戶體驗。當伺服器正在處理自己的事情的時候,用戶在做什麼?沒錯,等待。每一個動作,用戶都要等待。

很明顯,如果我們按桌面程序的思維設計Web應用,我們不願意讓用戶總是等待。當界面載入後,為什麼還要讓用戶每次再花一半的時間從服務取數據?實際上,為什麼老是讓用戶看到程序去伺服器取數據呢? Ajax如何不同凡響

通過在用戶和伺服器之間引入一個Ajax引擎,可以消除Web的開始-停止-開始-停止這樣的交互過程. 它就像增加了一層機制到程序中,使它響應更靈敏,而它的確做到了這一點。

不像載入一個頁面一樣,在會話的開始,瀏覽器載入了一個Ajax引擎---採用JavaScript編寫並且通常在一個隱藏frame中。這個引擎負責繪制用戶界面以及與伺服器端通訊。Ajax引擎允許用非同步的方式實現用戶與程序的交互--不用等待伺服器的通訊。所以用戶再不不用打開一個空白窗口,看到等待游標不斷的轉,等待伺服器完成後再響應。

圖 2: 傳統Web應用的同步交互過程(上)和Ajax應用的非同步交互過程的比較(下).

通常要產生一個HTTP請求的用戶動作現在通過JavaScript調用Ajax引擎來代替. 任何用戶動作的響應不再要求直接傳到伺服器---例如簡單的數據校驗,內存中的數據編輯,甚至一些頁面導航---引擎自己就可以處理它. 如果引擎需要從伺服器取數據來響應用戶動作---假設它提交需要處理的數據,載入另外的界面代碼,或者接收新的數據---引擎讓這些工作非同步進行,通常使用XML, 不用再擔誤用戶界面的交互。

㈩ ajax請求過程中都經歷了哪些狀態

1.創建 XMLHTTPRequest對象

2.注冊回調函數
注冊回調函數時,只需要寫函數名,不要加括弧
3.設置和伺服器端的連接信息

4.發送數據,開始和伺服器端進行交互,這里send里的參數為null,是因為採用了GET的請求方式
5.接受響應數據
判斷對象的狀態是否交互完成
0=未初始化,1=open方法成功調用以後,2=伺服器已經應答客戶端的請求3=交互中,4=完成,
readyState每變化一次,就調用一次回調函數callback,如果在這里加上一句話
alert(xmlhttp.readyState),打上斷點進行調試,發現,xmlhttp對象剛創建好,其狀態為0,執行完open以後,狀態為1
其實執行完open,callback就已經被調用,在執行send方法,其狀態又跑出個1,然後2,然後3,最後4