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)

大家都在看

  • SpringBoot——自定义Redis缓存Cache

    SpringBoot自带Cache存在问题: 1.生成Key过于简单,容易冲突 默认为cacheNames + ":" + Key2.无法设置过期时间,默认时间…

    Linux 2023年5月28日
    0100
  • algorithm 头文件参考

    定义执行算法的 C++ 标准库容器模板函数。 该 <algorithm></algorithm> 库还使用该 #include <initialize…

    Linux 2023年6月7日
    0113
  • Python——装饰器(Decorator)

    1.什么是装饰器? 装饰器放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上。和这个函数绑定在一起。在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函…

    Linux 2023年6月8日
    0142
  • WPF 调试依赖属性变更方法

    本文告诉大家如何调试 WPF 的某个依赖属性被变更的方法 在 WPF 里面,所有的依赖属性都有带通知的功能,通过带通知的功能,可以在通知里加上断点,通过调用堆栈了解是哪个模块调用的…

    Linux 2023年6月6日
    093
  • DDoS攻击–TCP攻击概述

    https://blog.csdn.net/qq_34777600/article/details/81945594 posted @2020-12-10 18:07 珠峰之梦 阅…

    Linux 2023年6月7日
    0101
  • c++ 使用shell命令

    #include #include #include #include #include //execute shell command //执行&#x…

    Linux 2023年5月28日
    0106
  • ASP.NET CORE在docker中的健康检查(healthcheck)

    在使用docker-compose的过程中,很多程序都提供了健康检查(healthcheck)的方法,通过健康检查,应用程序能够在确保其依赖的程序都已经启动的前提下启动,减少各种错…

    Linux 2023年6月6日
    0116
  • 【转】京东评价系统海量数据存储设计

    概述 京东的商品评论目前已达到数十亿条,每天提供的服务调用也有数十亿次,而这些数据每年还在成倍增长,而数据存储是其中最重要的部分之一,接下来就介绍下京东评论系统的数据存储是如何设计…

    Linux 2023年6月16日
    0129
  • 【Example】C++ 接口概念讲解及例子演示

    C++ 和 Java 不同的是,C++ 没有 interface 关键字。对于很多新手来说,C++ 当中接口的概念不容易像 Java 当中那样被理解。 然而接口是面向对象编程当中的…

    Linux 2023年6月13日
    094
  • Linux目录结构信息

    一、系统目录结构介绍 1.1 常见系统目录结构 Windows下: C:\windows D:\Program Files Linux下: /etc/sysconfig /usr/…

    Linux 2023年5月27日
    078
  • Linux 用户密码正确但无法登录和无法su问题故障

    一、 故障 描述 在应用登入操作系统时,用户密码正确但显示Permission denied无法登录,通过管理口控制台用root用户登录,也是同样情况,通过进入单用户查找问题。 一…

    Linux 2023年6月13日
    089
  • Django中orm的双重方法

    orm中的双重方法 更新或创建 Draw2DDevice.objects.update_or_create( defaults={‘x’: 777, ‘y’: 777,}, dev…

    Linux 2023年6月14日
    076
  • 跨平台(32bit和64bit)的 printf 格式符 %lld 输出64位的解决方式

    在 C/C++ 开发中,使用 printf 打印 64 位变量比较常用,通常在 32 位系统中使用 %lld 输出 64 位的变量,而在 64 位系统中则使用 %ld; 如果在 3…

    Linux 2023年6月7日
    091
  • 分区表、文件系统等计算机基础知识

    开机固件 BIOS UEFI 特别老的BIOS不支持GPT分区 目前已取代BIOS 分区表类型 MBR GPT 1.不支持2TB以上的硬盘2.主分区不能超过4个3.可以通过建立扩展…

    Linux 2023年6月7日
    0101
  • mysql存储中文乱码

    表现 前端页面,封装到html里的中文可以显示,和后台相关的中文显示都是 ??? 。查看network请求,传参正常。 查看mysql编码,是utf8。再看连接数据库的JDBC设置…

    Linux 2023年6月8日
    089
  • 三少玩Linux之LinuxMint, win7共存安装与简单配置

    先安装win7, 这里就不说了;再安装Mint, 这个是视频:https://www.bilibili.com/video/BV1AE411P7Cz; 这里关键就是LinuxMin…

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