您好,登錄后才能下訂單哦!
這篇文章主要介紹“ajax數據傳輸方式詳細介紹”,在日常操作中,相信很多人在ajax數據傳輸方式詳細介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ajax數據傳輸方式詳細介紹”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
一、純文本方式
1、發送/接收數據:
Code is cheap.看代碼:
testJs.js
// 此函數等價于document.getElementById /document.all function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } } // 創建 XMLHttpRequest對象,以發送ajax請求 function createXMLHTTP() { var xmlHttp = false; var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]; for (var i = 0; i < arrSignatures.length; i++) { try { xmlHttp = new ActiveXObject(arrSignatures[i]); return xmlHttp; } catch (oError) { xmlHttp = false; //ignore } } // throw new Error("MSXML is not installed on your system."); if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); } return xmlHttp; } var xmlReq = createXMLHTTP(); // 發送ajax處理請求(這里簡單驗證用戶名和密碼的有效性,默認正確的輸入:用戶名和密碼都是test) function validatePwd(oTxt) { var url = "/AjaxOperations.aspx"; xmlReq.open("post", url, true); xmlReq.setRequestHeader("Content-Length", oTxt.value.length + $("txtUserName").value.length); xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlReq.onreadystatechange = callBack; xmlReq.send("action=chkPwd&userInfos=" + escape(oTxt.value + "/" + $("txtUserName").value)); // 發送文本 } function callBack() { if (xmlReq.readyState == 4) { if (xmlReq.status == 200) { alert(xmlReq.responseText); // 接收文本 } else if (xmlReq.status == 404) { alert("Requested URL is not found."); } else if (xmlReq.status == 403) { alert("Access denied."); } else alert("status is " + xmlReq.status); } }
幾個附加文件源碼:
jsTest.htm
<html> <head> <title>js test</title> <script src="js/testJs.js" type="text/javascript"></script> </head> <body> <form id="form1"> <div> 用戶名:<input id="txtUserName" name="txtUserName" type="text" /> 密碼:<input id="txtPwd" name="txtPwd" type="password" onblur="validatePwd(this)" /></div> </form> </body> </html>
AjaxOperations.aspx
復制代碼 代碼如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxOperations.aspx.cs" Inherits="WebTest2008.AjaxOperations" %>
AjaxOperations.aspx.cs
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebTest2008 { public partial class AjaxOperations : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!string.IsNullOrEmpty(Request["action"]) && Request["action"] == "chkPwd") { string responseTxt = "用戶名和密碼不匹配!"; string tempStr = Request["userInfos"]; /* 測試用 實際項目中可以對數據庫進行檢索等等相關操作,這里簡化了 */ if (tempStr.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries)[0] == "test" && tempStr.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries)[1] == "test") { responseTxt = "驗證通過!"; } Response.Write(responseTxt); } } } }
一一保存文件,ctrl+F5,運行試試看吧。
上面這種方式是最簡單最直接也是最有效的方式。熟練使用最佳。
二、XML方式
1、發送XML數據
testJs.js
// 此函數等價于document.getElementById /document.all function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } } // 創建 XMLHttpRequest對象,以發送ajax請求 function createXMLHTTP() { var xmlHttp = false; var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]; for (var i = 0; i < arrSignatures.length; i++) { try { xmlHttp = new ActiveXObject(arrSignatures[i]); return xmlHttp; } catch (oError) { xmlHttp = false; //ignore } } // throw new Error("MSXML is not installed on your system."); if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); } return xmlHttp; } var xmlReq = createXMLHTTP(); // 發送ajax處理請求(這里簡單驗證用戶名和密碼的有效性,默認正確的輸入:用戶名和密碼都是test) function validatePwd(oTxt) { var url = "/AjaxOperations.aspx?action=xmlOp"; var xmlStr = "<profile>" + " <userName>" + escape($("txtUserName").value) + "</userName>" + " <userPwd>" + escape($("txtPwd").value) + "</userPwd>" + "</profile>"; xmlReq.open("post", url, true); // Tell the server you're sending it XML xmlReq.setRequestHeader("Content-Type", "text/xml"); // 這里注意 xmlReq.onreadystatechange = callBack; xmlReq.send(xmlStr); // 發送XML } function callBack() { if (xmlReq.readyState == 4) { if (xmlReq.status == 200) { alert(xmlReq.responseText); // 接收文本 } else if (xmlReq.status == 404) { alert("Requested URL is not found."); } else if (xmlReq.status == 403) { alert("Access denied."); } else alert("status is " + xmlReq.status); } }
jsTest.htm文件不變,AjaxOperations.aspx的HTML文件內容不變,服務器端.CS處理代碼如下:
AjaxOperations.aspx.cs
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Xml; namespace WebTest2008 { public partial class AjaxOperations : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!string.IsNullOrEmpty(Request["action"]) && Request["action"] == "xmlOp") // 處理xml { XmlDocument doc = new XmlDocument(); try { doc.Load(Request.InputStream); //獲取xml數據(這里需要注意接受xml數據的方法) } catch (Exception ex) { throw ex; } string responseTxt = ""; string tempName = doc.SelectSingleNode("profile/userName").InnerText; string tempPwd = doc.SelectSingleNode("profile/userPwd").InnerText; if (tempName == "test" && tempPwd == "test") { responseTxt = "驗證通過!"; } else responseTxt = "驗證失敗!"; Response.Write(responseTxt); // 寫文本 } } } }
很簡單的代碼,運行看看吧。
2、接收XML數據:
我們看到,上面兩個.js文件里處理返回數據時都用到了xmlReq.responseText的屬性,下面我們試試看xmlReq.responseXML屬性:
testJs.js
// 此函數等價于document.getElementById /document.all function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } } // 創建 XMLHttpRequest對象,以發送ajax請求 function createXMLHTTP() { var xmlHttp = false; var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]; for (var i = 0; i < arrSignatures.length; i++) { try { xmlHttp = new ActiveXObject(arrSignatures[i]); return xmlHttp; } catch (oError) { xmlHttp = false; //ignore } } // throw new Error("MSXML is not installed on your system."); if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); } return xmlHttp; } var xmlReq = createXMLHTTP(); // 發送ajax處理請求(這里簡單驗證用戶名和密碼的有效性,默認正確的輸入:用戶名和密碼都是test) function validatePwd(oTxt) { var url = "/AjaxOperations.aspx?action=xmlOp"; var xmlStr = "<profile>" + " <userName>" + escape($("txtUserName").value) + "</userName>" + " <userPwd>" + escape($("txtPwd").value) + "</userPwd>" + "</profile>"; xmlReq.open("post", url, true); // Tell the server you're sending it XML xmlReq.setRequestHeader("Content-Type", "text/xml"); xmlReq.onreadystatechange = callBack; xmlReq.send(xmlStr); // 發送XML } function callBack() { if (xmlReq.readyState == 4) { if (xmlReq.status == 200) { var xmlDoc = xmlReq.responseXML; // 接收XML // var nodes = xmlDoc.childNodes; // alert("文件根標簽的名稱: " + xmlDoc.documentElement.tagName); // alert("根元素共有子節點個數: " + xmlDoc.documentElement.childNodes.length); alert(xmlDoc.documentElement.childNodes(0).text); } else if (xmlReq.status == 404) { alert("Requested URL is not found."); } else if (xmlReq.status == 403) { alert("Access denied."); } else alert("status is " + xmlReq.status); } }
同樣,jsTest.htm文件不變,AjaxOperations.aspx的HTML文件內容不變,服務器端.CS處理代碼稍作修改如下:
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Xml; namespace WebTest2008 { public partial class AjaxOperations : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!string.IsNullOrEmpty(Request["action"]) && Request["action"] == "xmlOp") // 處理xml { XmlDocument doc = new XmlDocument(); try { doc.Load(Request.InputStream); //獲取xml數據 } catch (Exception ex) { throw ex; } string responseXmlTxt = ""; string tempName = doc.SelectSingleNode("profile/userName").InnerText; string tempPwd = doc.SelectSingleNode("profile/userPwd").InnerText; if (tempName == "test" && tempPwd == "test") { responseXmlTxt = "<?xml version=\"1.0\" encoding=\"utf-8\" ?> <msg>驗證通過!</msg>"; // 測試用,簡單的xml文件 } else responseXmlTxt = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><msg>驗證失敗!</msg>"; Response.ContentType = ("text/xml;charset=UTF-8"); // 這里必須要設置,否則客戶端接收不到這里寫好的xml文件 Response.Write(responseXmlTxt); // 寫xml Response.End(); } } } }
好了,前面兩種方法是大家平時開發中比較熟悉的方式,下面我們來看看第三種方式。
三、JSON方式
json的準備知識:
json是一種簡單的數據格式,比xml更輕巧。json是JavaScript 的原生格式,這意味著在 JavaScript 中處理json格式的 數據不需要任何特殊的API 或工具包。json的語法規則其實很簡單:對象是一個無序的“‘名稱/值'對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”后跟一個“:”(冒號);“‘名稱/值' 對”之間使用“,”(逗號)分隔。看個例子先:
function testJson() { //定義一個user(json的格式,其實就是定義一個js函數(變量)的方式而已) var user = { "username": "jeff wong", "age": 25, "info": { "tel": "12345678", "cellphone": "13312345678" }, "address": // 數組 [ { "city": "beijing", "postcode": "101110" }, { "city": "ny city", "postcode": "911119" } ] } alert(user.username); alert(user.age); alert(user.info.cellphone); alert(user.address[0].city); alert(user.address[0].postcode); user.username = "xiao wang"; alert(user.username); }
上面的定義方式看起來很簡單,但是如果字段眾多,命名方式混雜,出錯的概率大大增加,怎么辦?這時候你就會想到用程序的方式生成json數據。json提供了json.js包,專門提供了幾種常用的json處理函數。下載下來,(json.js點擊此處本站下載。) ,將其引入然后就可以簡單的使用object.toJSONString()轉換成json數據。看代碼:
function Car(maker, model, year, color) { this.maker = maker; this.model = model; this.year = year; this.color = color; } function testJson() { var tempCar = new Car("VW", "S", 1999, "yellow"); alert(tempCar.toJSONString()); }
也可以使用eval或者parseJSON()方法來轉換json數據到object:
function testJson() { var str = '{ "name": "jeff wong", "age": 25,"address":"beijing"}'; var tempObj = eval('(' + str + ')'); alert(tempObj.toJSONString()); //使用eval方法 var tempObj1 = str.parseJSON(); alert(tempObj1.toJSONString()); // 或者使用parseJSON()方法 }
關于json.js的學習,請參考網上其他資源,這里我不再贅述了。說了這么多,實踐環節開始了:
ajax利用json發送/接收數據:
// 此函數等價于document.getElementById /document.all function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } } // 創建 XMLHttpRequest對象,以發送ajax請求 function createXMLHTTP() { var xmlHttp = false; var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]; for (var i = 0; i < arrSignatures.length; i++) { try { xmlHttp = new ActiveXObject(arrSignatures[i]); return xmlHttp; } catch (oError) { xmlHttp = false; //ignore } } // throw new Error("MSXML is not installed on your system."); if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); } return xmlHttp; } var xmlReq = createXMLHTTP(); // 發送ajax處理請求(這里簡單驗證用戶名和密碼的有效性,默認正確的輸入:用戶名和密碼都是test) function validatePwd(oTxt) { var url = "/AjaxOperations.aspx?action=jsonOp"; // JSON就只是文本,由于不需要特殊編碼而且每個服務器端腳本都能處理文本數據,所以可以輕松利用JSON并將其應用到服務器。 var str = '{ "userName":"' + $("txtUserName").value + '", "userPwd": "' + $("txtPwd").value + '"}'; var jsonStr = str.parseJSON().toJSONString(); // you're sending it JSON xmlReq.open("post", url, true); xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlReq.onreadystatechange = callBack; xmlReq.send("sendStr=" + jsonStr); // 發送JSON(在服務器上解釋JSON) } function callBack() { if (xmlReq.readyState == 4) { if (xmlReq.status == 200) { var jsonStr = xmlReq.responseText.parseJSON().toJSONString(); //轉化為json數據 alert(jsonStr); } else if (xmlReq.status == 404) { alert("Requested URL is not found."); } else if (xmlReq.status == 403) { alert("Access denied."); } else alert("status is " + xmlReq.status); } }
附加文件,AjaxOperations.aspx的html頁面沒有改變,AjaxOperations.aspx.cs代碼稍作調整如下:
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebTest2008 { public partial class AjaxOperations : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!string.IsNullOrEmpty(Request["action"]) && Request["action"] == "jsonOp") // 處理JSON { string responseJsonTxt = ""; string tempStr = Request["sendStr"].Trim(new char[] { '{', '}' }); // 在服務器上解釋JSON需要引用一個能夠轉化JSON的組件:Json.Net,這里簡單測試,略過Json.Net if (tempStr.Split(new char[] { ',' })[0].Split(new char[] { ':' })[1] == "\"test\"" && tempStr.Split(new char[] { ',' })[1].Split(new char[] { ':' })[1] == "\"test\"") { responseJsonTxt = "{\"msg\":\"驗證通過!\"}"; // 測試用 } else responseJsonTxt = "{\"msg\":\"驗證失敗!\"}"; Response.Write(responseJsonTxt); Response.End(); } }
jsTest.html引入json.js文件(必須下載json.js文件,否則js報錯),如下:
<html> <head> <title>js test</title> <script src="js/json.js" type="text/javascript"></script> <script src="js/testJs.js" type="text/javascript"></script> </head> <body> <form id="form1"> <div> 用戶名:<input id="txtUserName" name="txtUserName" type="text" /> 密碼:<input id="txtPwd" name="txtPwd" type="password" onblur="validatePwd(this)" /></div> </form> </body> </html>
到此,關于“ajax數據傳輸方式詳細介紹”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。