ajax的发展

ajax(Asynchronous Javascript and XML)异步javascrip和XMl.

ajax只是一种web交互方法。在客户端(浏览器)和服务区段之间传输少量的信息。从而为用户提供及时的响应。

在传统的web应用程序中,浏览器本身负责初始化到服务区的请求,并处理来自服务器的响应。而ajax模式不同,他提供了·一个中间层里处理这种通信。ajax引擎实际上只是一个javascript对象或函数,只有当需要从服务器获取信息时才调用它。

服务器方面配置向ajax引擎返回其可用的数据,这些数据可以是纯文本,XML或者需要的任何格式。唯一的要求就是ajax可以处理这些数据。

ajax的发展

随着html帧的引入 早期的ajax雏形出现但是没有用到ajax对象,那就是引用帧技术了。

基本就是把连接给其他的帧,不用去打开另外的一个页面。这里最适合的就是服务器与客户端之间的通信(其实一开始对ajax的理解就是不刷新页面就可以局部的改变页面。例如地图)

这里讲引用帧的介绍了 直接贴代码了。

第一个html页面就叫a.html吧

用帧来显示两个页面一个提供表格显示与服务端的数据响应(requestCustomerInfo && displayCustomerInfo),另外一个连接服务器。

javascript;gutter:true; Customer Account Information</p> <pre><code> //<![CDATA[ function requestCustomerInfo() { var sId = document.getElementById("txtCustomerId").value; top.frames["hiddenFrame"].location = "GetCustomerData.php?id=" + sId; } function displayCustomerInfo(sText) { var divCustomerInfo = document.getElementById("divCustomerInfo"); divCustomerInfo.innerHTML = sText; } //]]> Enter customer ID number to retrieve information: Customer ID: </code></pre> <pre><code> 这里的代码 top.frames["hiddenFrame"].location="getcustomerdata.php?id="+sId为隐藏帧指派url. 后台php代码: <pre><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>Get Customer Data</title> <?<span>php <span>//</span><span>customer ID</span> $sID = $_GET[&quot;id&quot;<span>]; </span><span>//</span><span>validation for ID</span> <span>if</span><span> (is_numeric($sID) { </span><span>//</span><span>variable to hold customer info</span> $sInfo = &quot;&quot;<span>; </span><span>//</span><span>database information</span> $sDBServer = &quot;your.database.server&quot;<span>; $sDBName </span>= &quot;your_db_name&quot;<span>; $sDBUsername </span>= &quot;your_db_username&quot;<span>; $sDBPassword </span>= &quot;your_db_password&quot;<span>; </span><span>//</span><span>create the SQL query string</span> $sQuery = &quot;Select * from Customers where CustomerId=&quot;<span>.$sID; </span><span>//</span><span>make the database connection</span> $oLink =<span> mysql_connect($sDBServer,$sDBUsername,$sDBPassword); @mysql_select_db($sDBName) or $sInfo </span>= &quot;Unable to open database&quot;<span>; </span><span>if</span> ($sInfo == &quot;&quot;<span>){ </span><span>if</span>($oResult = mysql_query($sQuery) and mysql_num_rows($oResult) &gt; 0<span>) { $aValues </span>=<span> mysql_fetch_array($oResult,MYSQL_ASSOC); $sInfo </span>= $aValues[&apos;Name&apos;].&quot;<br>&quot;.$aValues[&apos;Address&apos;].&quot;<br>&quot;<span>. $aValues[</span>&apos;City&apos;].&quot;<br>&quot;.$aValues[&apos;State&apos;].&quot;<br>&quot;<span>. $aValues[</span>&apos;Zip&apos;].&quot;<br><br>Phone: &quot;.$aValues[&apos;Phone&apos;].&quot;<br>&quot;<span>. </span>&quot;<a>&quot;.$aValues[&apos;Email&apos;].&quot;</a>&quot;<span>; mysql_free_result($oResult); } </span><span>else</span><span> { $sInfo </span>= &quot;Customer with ID $sID doesn&apos;t exist.&quot;<span>; } } mysql_close($oLink); } </span><span>else</span><span> { $sInfo </span>= &quot;Invalid customer ID.&quot;<span>; } </span>?&gt; <script> <span>//</span><span><![CDATA[</span> window.onload = <span>function</span><span> () { </span><span>var</span> divInfoToReturn = document.getElementById("divInfoToReturn"<span>);//<span>获取div文本;作为参数传递个同一级的兄弟窗体</span></span><span>top.frames["displayFrame"]</span>.</pre><pre><span>        top.frames[</span>"displayFrame"<span>].displayCustomerInfo(divInfoToReturn.innerHTML);<br>   }; </span><span>//</span><span>]]><br></span> </script><br> </head><br> <body><br> //在这里添加文本。 <br></body><br> </html></pre> 数据库脚本 </code></pre> <p>CREATE TABLE <code>Customers</code> ( <code>CustomerId</code> int(11) NOT NULL auto_increment, <code>Name</code> varchar(255) NOT NULL default '', <code>Address</code> varchar(255) NOT NULL default '', <code>City</code> varchar(255) NOT NULL default '', <code>State</code> varchar(255) NOT NULL default '', <code>Zip</code> varchar(25) NOT NULL default '', <code>Phone</code> varchar(25) NOT NULL default '', <code>Email</code> varchar(255) NOT NULL default '', PRIMARY KEY (<code>CustomerId</code>) )data:</p> <pre><code> INSERT INTO Customers VALUES (1, 'Michael Smith', '123 Somewhere Road', 'Beverly Hills', 'California', '90210', '(555) 555-1234', 'michael@somewhere.com'); INSERT INTO Customers VALUES (2, 'Matthew Johnson', '1234 Somewhere Else Street', 'Elsewhere', 'Confusion', '00000', '(555) 555-2345', 'johnboy@neato.net'); INSERT INTO Customers VALUES (3, 'Cindy Benjamin', '1313 Mockingbird Lane', 'Somewhere', 'Montana', '00000', '(555) 555-9876', 'cindybean@mcok.net'); INSERT INTO Customers VALUES (4, 'Mary Klein', '10 Highland Avenue', 'Salem', 'Massachusetts', '01970', '(555) 555-4920', 'mary@klein.net'); II:继续说隐藏帧技术: 上面的是get请求,现在我们来看一下post请求方式(比较贴近ajax的页面无需刷新) 主页面基相同: <pre><frameset>&quot;<span>100%,0</span><span>&quot;</span> style=<span>&quot;</span><span>border: 0px</span><span>&quot;</span>&gt; <frame>&quot;<span>displayFrame</span><span>&quot;</span> src=<span>&quot;</span><span>DataEntry.php</span><span>&quot;</span> noresize=<span>&quot;</span><span>noresize</span><span>&quot;</span> style=<span>&quot;</span><span>border: 0px</span><span>&quot;</span> /&gt; <frame>&quot;<span>hiddenFrame</span><span>&quot;</span> src=<span>&quot;</span><span>about:blank</span><span>&quot;</span> noresize=<span>&quot;</span><span>noresize</span><span>&quot;</span> style=<span>&quot;</span><span>border: 0px</span><span>&quot;</span> /&gt; </frameset> <span>//</span><span>主页面pre </span><span>//</span><span>frames[&apos;displayFrame&apos;]的链接页面</span> <head> <title>Create New Customer</title> <script>"</span><span>text/javascript</span><span>"</span>> <span>//</span><span><![CDATA[</span> <span> function saveResult(sMessage) { </span><span>var</span> divStatus = document.getElementById(<span>"</span><span>divStatus</span><span>"</span><span>); divStatus.innerHTML </span>= <span>"</span><span>Request completed: </span><span>"</span> +<span> sMessage; } </span><span>//</span><span>]]></span> </script> </head> <body> <form>&quot;<span>post</span><span>&quot;</span> action=<span>&quot;</span><span>SaveCustomer.php</span><span>&quot;</span> <span>target=<span>&quot;</span><span>hiddenFrame</span><span>&quot;</span></span>&gt;//target指向frames[&quot;hiddenFrame&quot;];页面不会跳转。 <p>Enter customer information to be saved:</p> <p>Customer Name: <input>&quot;<span>text</span><span>&quot;</span> name=<span>&quot;</span><span>txtName</span><span>&quot;</span> value=<span>&quot;&quot;</span> /&gt;<br></p></form></body></pre> php代码 <pre><!DOCTYPE html PUBLIC <span>&quot;<span>-//W3C//DTD XHTML 1.0 Transitional//EN</span><span>&quot;</span> <span>&quot;</span><span>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</span><span>&quot;</span>&gt; <html>&quot;<span>http://www.w3.org/1999/xhtml</span><span>&quot;</span> &gt; <head> <title>Save Customer</title> <?<span>php <span>//</span><span>get information</span> $sName = mysql_real_escape_string($_POST[<span>&quot;</span><span>txtName</span><span>&quot;</span><span>]); $sAddress </span>= mysql_real_escape_string($_POST[<span>&quot;</span><span>txtAddress</span><span>&quot;</span><span>]); $sCity </span>= mysql_real_escape_string($_POST[<span>&quot;</span><span>txtCity</span><span>&quot;</span><span>]); $sState </span>= mysql_real_escape_string($_POST[<span>&quot;</span><span>txtState</span><span>&quot;</span><span>]); $sZipCode </span>= mysql_real_escape_string($_POST[<span>&quot;</span><span>txtZipCode</span><span>&quot;</span><span>]); $sPhone </span>= mysql_real_escape_string($_POST[<span>&quot;</span><span>txtPhone</span><span>&quot;</span><span>]); $sEmail </span>= mysql_real_escape_string($_POST[<span>&quot;</span><span>txtEmail</span><span>&quot;</span><span>]); </span><span>//</span><span>status message</span> $sStatus = <span>&quot;&quot;</span><span>; </span><span>//</span><span>database information</span> $sDBServer = <span>&quot;</span><span>your.database.server</span><span>&quot;</span><span>; $sDBName </span>= <span>&quot;</span><span>your_db_name</span><span>&quot;</span><span>; $sDBUsername </span>= <span>&quot;</span><span>your_db_username</span><span>&quot;</span><span>; $sDBPassword </span>= <span>&quot;</span><span>your_db_password</span><span>&quot;</span><span>; </span><span>//</span><span>create the SQL query string</span> $sSQL = <span>&quot;</span><span>Insert into Customers(Name,Address,City,State,Zip,Phone,) </span><span>&quot;</span><span>. </span><span>&quot;</span><span> values (&apos;$sName&apos;,&apos;$sAddress&apos;,&apos;$sCity&apos;,&apos;$sState&apos;, &apos;$sZipCode&apos;</span><span>&quot;</span><span>. </span><span>&quot;</span><span>, &apos;$sPhone&apos;, &apos;$sEmail&apos;)</span><span>&quot;</span><span>; $oLink </span>=<span> mysql_connect($sDBServer,$sDBUsername,$sDBPassword); @mysql_select_db($sDBName) or $sStatus </span>= <span>&quot;</span><span>Unable to open database</span><span>&quot;</span><span>; </span><span>if</span> ($sStatus == <span>&quot;&quot;</span><span>) { </span><span>if</span><span>(mysql_query($sSQL)) { $sStatus </span>= <span>&quot;</span><span>Added customer; customer ID is </span><span>&quot;</span><span>.mysql_insert_id(); } </span><span>else</span><span> { $sStatus </span>= <span>&quot;</span><span>An error occurred while inserting; customer not saved.</span><span>&quot;</span><span>; } } mysql_close($oLink); </span>?&gt; <script>"</span><span>text/javascript</span><span>"</span>> <span>//</span><span><![CDATA[</span> window.onload =<span> function () { top.frames[</span><span>"</span><span>displayFrame</span><span>"</span>].saveResult(<span>"</span><span><?php echo $sStatus ?></span><span>"</span><span>); } </span><span>//</span><span>]]></span> </script> </head> <body> </body> </html></pre> 下面的一个是用表单序列化来处理post数据 html </code></pre> <p>//jsfunction formReady() {</p> <pre><code> //get your reference to the form var oForm = document.forms[0]; var oHiddenForm = oIFrame.document.forms[0]; //iterate over each element in the form for (var i=0 ; i < oForm.elements.length; i++) { //get reference to the field var oField = oForm.elements[i]; //different behavior based on the type of field switch (oField.type) { //buttons - we don't care case "button": case "submit": case "reset": break; //checkboxes/radio buttons - only return the value if the controlis checked. case "radio": case "checkbox": if (!oField.checked) { break; } //text/hidden/password all return the value case "text": case "hidden": case "password": createInputField(oHiddenForm, oField.name, oField.value); break; default: switch(oField.tagName.toLowerCase()) { case "select": createInputField(oHiddenForm, oField.name, oField.options[oField.selectedIndex].value);//创建一个新的input break; default: createInputField(oHiddenForm, oField.name, oField.value); } } } oHiddenForm.action = oForm.action; oHiddenForm.submit();//表单form的submit方法提交 };// function createInputField(oHiddenForm, sName, sValue) {            oHidden = oIFrame.document.createElement("input");            oHidden.type = "hidden";            oHidden.name = sName;                                                    oHidden.value = sValue;            oHiddenForm.appendChild(oHidden);                            }//创建一个隐藏的iframvar oIFrame = null;                function createIFrame() {            var oIFrameElement = document.createElement("iframe");            oIFrameElement.style.display = "none";            oIFrameElement.name = "hiddenFrame";            oIFrameElement.id = "hiddenFrame";            document.body.appendChild(oIFrameElement);                        oIFrame = frames["hiddenFrame"];        }//调用开始 function checkIFrame() {            if (!oIFrame) {                createIFrame();                            }                     //takes a cycle for some browers to recognize the new element            setTimeout(function () {                oIFrame.location = "ProxyForm.php";            }, 10);                                      }//html    Enter customer information to be saved:    Customer Name:     Address:     City:     State:     Zip Code:     Phone:     E-mail: </code></pre> <p>

ProxyForm.php




    
"post" action="#">

然后就是ajax登场了

Original: https://www.cnblogs.com/isFinite-rs/p/6964205.html
Author: caibird_bg
Title: ajax的发展

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609144/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JAVA中如何将以Date型的数据保存到数据库以Datetime型的字段中

    用Timestamp就行了 recordOuttime是Date类型 import java.sql.Timestamp; Record record = recordMapper…

    Linux 2023年6月8日
    086
  • docker:打包node+npm+pm2运行环境镜像

    最近公司有一个外包项目需要在不能连外网的情况下部署node项目到甲方公司内部。直接使用node官网的安装包可以获得node运行环境,但像pm2这种工具要离线装就会比较费劲,所以最终…

    Linux 2023年6月13日
    0102
  • 如何配置静态路由

    1.主机A想要和主机B 进行通讯,首先会发送一个ARP的广播。 2.第一次封装包含:源IP(192.168.1.2)目的IP(192.168.2.2);源Mac(11-11)目的M…

    Linux 2023年6月6日
    0117
  • Linux C/C++ 获取进程号、线程号和设置线程名

    在Linux开发过程中,设计多线程开发时可以将进程和线程的 id 打印出来,方便开发调试和后期查问题使用,同时也包括设置线程名。 2.1 进程ID #include <uni…

    Linux 2023年6月7日
    0140
  • vue2和nginx配置Gzip

    减小js和css文件大小,提高首屏速度。虽然也没有快到哪里去(可能是因为我没有调参),但js、css文件的大小都大幅度减小了。参考:https://blog.csdn.net/qq…

    Linux 2023年6月7日
    0110
  • 国产银河麒麟Kylin V10操作系统

    今天想在国产银河麒麟Kylin V10操作系统中设置win+E显示资源管理器(我的电脑)的快捷键,首先需要判断麒麟操作系统使用的哪种桌面, 在终端Terminal中执行 echo …

    Linux 2023年6月14日
    0102
  • CentOS7.6下安装Redis5.0.7

    此次安装是在CentOS7下安装Redis5.0.7 &#x8FD9;&#x91CC;&#x4E0B;&#x8F7D;&#x7684;&am…

    Linux 2023年6月14日
    0118
  • Android(Java)控制GPIO的方法及耗时分析

    前面两篇分别介绍了通过脚本和C代码读写/sys/class/gpio以控制GPIO。实际项目调试时经常还需要在Java代码里控制GPIO,其实现与C代码类似,唯一不同是Androi…

    Linux 2023年6月7日
    095
  • 爬虫

    简介: 浏览器发送http请求,去后端服务器获取到数据之后只能从浏览器中看,如果要把需要的数据保存到本地,存到我们自己库中就可以用到爬虫 百度本质就是一个大爬虫(搜索),在输入框中…

    Linux 2023年6月14日
    0112
  • NO.2 Windows桌面图标-间距参数调整

    遇到如下问题: 桌面图标自动排序后间隔过大,且如图二这种指向图标能看到图标之间的间隔虚框,此方法可调整虚框的水平和垂直距离,即调整图标之间的间距。 测试电脑: 华为 mateboo…

    Linux 2023年6月7日
    0136
  • Linux基础学习(三)

    [root@ct7 ~]# grep -vc “/sbin/nologin” /etc/passwd [root@ct7 ~]# grep -v “/sbin/nologin” /…

    Linux 2023年6月8日
    097
  • 缓存提升性能的关键性手段

    提高「性能」的主要方式是优化,而优化的其中一个主要手段就是添加缓存! 在软件工程里有这么一句话:「没有银弹」!就是说由于软件工程的复杂性,没有任何一种技术或方法能解决所有问题!软件…

    Linux 2023年6月14日
    097
  • python入门基础知识五(for循环、公共操作与推导式)

    for循环 break终止循环 a = ‘abcd’ for i in a: … if i == ‘c’: … print("’c’ stands for ‘ce…

    Linux 2023年6月7日
    0131
  • ELK收集MySQL慢日志并告警

    采用的是 filebeat采集日志, Redis做日志存储, logstash消费处理日志,将处理过的日志存储到 ES, kibana做日志展示, Elastalert做监控告警长…

    Linux 2023年5月27日
    0104
  • nodejs 环境安装

    Linux 系统安装 nodejs 环境 (root) &#x627E;&#x5230; nodejs &#x5B98;&#x7F51; http:…

    Linux 2023年6月14日
    0141
  • VMware vSphere 7 Update 3 下载

    请访问原文链接:https://sysin.org/blog/vmware-vsphere-7-u3/,查看最新版。原创作品,转载请保留出处。 vSphere 7 Update 3…

    Linux 2023年5月27日
    0117
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球