Qt+QtWebApp開發筆記(五):http服務器html中使用json觸發ajax與後臺交互實現數據更新傳遞

前言

  前面完成了頁面的跳轉、登錄,很多時候不刷新頁面就想刷新局部數據,此時ajax就是此種技術,且是異步的。
  本篇實現網頁內部使用js調用ajax實現異步交互數據。
  在js中使用 ajax是通過XMLHttpRequest來實現的。

 

Demo

  在這裏插入圖片描述

下載地址

 

Ajax與XMLHttpRequest

Ajax

  Ajax即Asynchronous Javascript And XML(異步JavaScript和XML)在 2005年被Jesse James Garrett提出的新術語,用來描述一種使用現有技術集合的‘新’方法,包括:HTML或XHTML、CSS、JavaScript、DOM、XML、XSLT以及最重要的XMLHttpRequest。使用Ajax技術網頁應用能夠快速地將增量更新呈現在用戶界面上,而不需要重載(刷新)整個頁面,這使得程序能夠更快地迴應用戶的操作。
  Ajax不是一種新的編程語言,而是一種用於創建更好更快以及交互性更強的Web應用程序的技術。使用JavaScript向服務器提出請求並處理響應而不阻塞用戶核心對象XMLHttpRequest。通過這個對象,JavaScript可在不重載頁面的情況與Web服務器交換數據,即在不需要刷新頁面的情況下,就可以產生局部刷新的效果。Ajax在瀏覽器與 Web 服務器之間使用異步數據傳輸(HTTP 請求),這樣就可使網頁從服務器請求少量的信息,而不是整個頁面。

  • Ajax可使因特網應用程序更小、更快,更友好。
  • Ajax是一種獨立於Web服務器軟件的瀏覽器技術。
  • Ajax基於Web標準:JavaScript、XML、HTML與CSS,在Ajax中使用的Web標準已被良好定義,並被所有的主流瀏覽器支持。
  • Ajax用程序獨立於瀏覽器和平臺。

  Web應用程序較桌面應用程序有諸多優勢;它們能夠涉及廣大的用戶,它們更易安裝及維護,也更易開發。但是,因特網應用程序並不像傳統的桌面應用程序那樣完善且友好。 通過 Ajax,因特網應用程序可以變得更完善,更友好。

 

XMLHttpRequest

  XMLHTTP是一組API函數集,可被JavaScript、JScript、VBScript以及其它web瀏覽器內嵌的腳本語言調用,通過HTTP在瀏覽器和web服務器之間收發XML或其它數據。XMLHTTP最大的好處在於可以動態地更新網頁,它無需重新從服務器讀取整個網頁,也不需要安裝額外的插件。該技術被許多網站使用,以實現快速響應的動態網頁應用。例如:Google的Gmail服務、Google Suggest動態查找界面以及Google Map地理信息服務。
  XMLHTTP是AJAX網頁開發技術的重要組成部分。除XML之外,XMLHTTP還能用於獲取其它格式的數據,如JSON或者甚至純文本。
  使用XMLHttpRequest來發送HTTP請求以實現網站和服務器之間的數據交換。
  XMLHttpRequest對象是Ajax的核心,它有許多的屬性、方法和事件。

屬性

readyState:當前狀態

  當一個XMLHttpRequest對象被創建後,readyState屬性標識了當前對象的狀態。
  在這裏插入圖片描述

responseText:響應文本

responseText屬性包含客戶端接收到的HTTP響應的文本內容。

  • readyState爲0、1、2時:爲一個空字符串;
  • readyState爲3時:爲還未完成的響應信息;
  • readyState爲4時:爲含完整的響應信息;

statusText:狀態文本

  描述了HTTP狀態代碼文本,並且僅當readyState屬性值爲3或4時纔可用。檢測返回結果的判斷就是:

if(readyState===4 && statusText===200)
{
	……
}

  如我們的Demo:
  在這裏插入圖片描述

函數

open():初始化請求

open(method, url, async, username, password)
  • 參數method:請求的類型,GET、POST、PUT、DELETE、HEAD類型,輸入的時候使用大寫;
  • 參數url:請求的資源地址,請求資源的web api地址;
  • 參數async:是否發送異步請求,true-異步請求,false-同步請求;
  • 參數username(可爲空):需要服務器驗證訪問用戶時,設置username;
  • 參數password(可爲空):需要服務器驗證訪問用戶時,設置password;

send():發送請求

  調用open()方法後,再調用send()方法將請求發送。當open()方法中async參數爲true(異步)時,在send()方法調用後立即返回,否則將會中斷直到請求返回。

setRequestHeader():設置頭部信息

  設置請求的頭部信息

getResponseHeader():獲取頭部信息

  獲取請求的頭部信息

事件

  onreadystatechange:狀態變化事件
  當readyState屬性值發生改變時,就會觸發onreadystatechang事件,代碼中是依賴onreadystatechang進一步判斷狀態和狀態文本來做處理。
  在這裏插入圖片描述

 

使用XMLHttpRequest的步驟

步驟一:在腳本中實例化XHMLHttpRequest

var xhr = new XMLHttpRequest();

步驟二:初始化請求open()

xhr.open('GET','/checkState/data',true);

步驟三:發送請求

xhr.send();

步驟四:書寫事件處理函數並判斷狀態和狀態文本

xhr.onreadystatechange = function() {
	if(xhr.readyState === 4 && xhr.status === 200)
	{
		……
	}
}

步驟五:書寫返回成功的js處理代碼

document.getElementById("dt2").innerHTML = xhr.responseText;
 

Demo增量使用ajax交互過程

步驟一:準備代碼模板

  準備之前的demo v1.3.0模板:
  在這裏插入圖片描述

步驟二:新增checkState.html頁面

  下面是新增定時獲取和手動按鈕獲取得html:
  在這裏插入圖片描述

步驟三:創建CheckStateRequestHandle處理

  新建了一個處理,特別是增加了對於ajax技術的路徑處理
  在這裏插入圖片描述

  在這裏插入圖片描述

步驟四:將CheckStateRequestHandle接入

  在這裏插入圖片描述
  在這裏插入圖片描述

 

Demo源碼

checkState.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>長沙紅胖子Qt</title>
</head>
<body>
	<p><a>這裏是檢測狀態Demo v1.4.0了</a></p>
	<p><a id="dt1">123.567</a></p>
	<p><a id="dt2">123.567</a></p>
	<p><a id="dt3">123.567</a></p>
	<p><button onclick="reset()">清空</button></p>
	<p><button onclick="getDt1()">獲取</button></p>
	<script>
		function reset() {
			document.getElementById("dt1").innerHTML="---.---";
			document.getElementById("dt2").innerHTML="---.---";
			document.getElementById("dt3").innerHTML="---.---";
		}
		function getDt1(
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章