AJAX 教程


 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

 AJAX 教程涵盖了适用于初学者和专业人士的AJAX技术的概念和示例。

 AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

 AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

 AJAX 允许您仅将重要信息发送到服务器而不是整个页面。因此,只有来自客户端的有价值数据才会路由到服务器端。它使您的应用程序具有交互性和更快。


AJAX 实例

使用 AJAX 修改该文本内容


尝试一下 »


在哪里使用?

 Web上运行的Web应用程序大多使用的是ajax技术,如gmail,facebook,twitter,google map,youtube等。

 现在开始学习 AJAX !


AJAX 简介


 AJAX 可以用于创建快速动态的网页。

 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。


您应当具备的基础知识


 在继续学习之前,您需要对下面的知识有基本的了解:

  • HTML / XHTML

  • CSS

  • JavaScript / DOM

 如果您希望首先学习这些项目,请在我们的首页访问这些教程。


什么是 AJAX ?


 AJAX = 异步 JavaScript 和 XML。

 AJAX 是一种用于创建快速动态网页的技术。

 AJAX 是一种借助XML,HTML,CSS和Java Script创建更好,更快,更交互的Web应用程序的新技术。

 AJAX 是一种独立于Web服务器软件的Web浏览器技术。

 AJAX 使用XHTML作为内容,CSS使用文档对象模型和JavaScript进行动态内容显示。

 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

 传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。

 使用AJAX,当您点击提交时,JavaScript将向服务器发出请求,解释结果并更新当前屏幕。

 当客户端程序在后台请求来自服务器的信息时,用户可以继续使用该应用程序。

 数据驱动而不是页面驱动。

 有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。

注意:Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。

AJAX 工作原理


AJAX


AJAX是基于现有的Internet标准


 AJAX是基于现有的Internet标准,并且联合使用它们:

  • XMLHttpRequest 对象 (异步的与服务器交换数据)

  • JavaScript/DOM (信息显示/交互)

  • CSS (给数据定义样式)

  • XML (作为转换数据的格式)

lamp  AJAX应用程序与浏览器和平台无关的!


Google Suggest


 在 2005 年,Google 通过其 Google Suggest 使 AJAX 变得流行起来。

 Google Suggest 使用 AJAX 创造出动态性极强的 web 界面:当您在谷歌的搜索框输入关键字时,JavaScript 会把这些字符发送到服务器,然后服务器会返回一个搜索建议的列表。


今天就开始使用 AJAX


 AJAX 基于已有的标准。这些标准已被大多数开发者使用多年。

 现在你已经对AJAX有了初步的了解,那么请你继续阅读下一章,来看看 AJAX 是如何工作的!

AJAX 实例


 AJAX的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。

 为了帮助您理解 AJAX 的工作原理,我们创建了一个小型的 AJAX 应用程序:

实例

使用 AJAX 修改该文本内容


尝试一下 »

AJAX 实例解析


 上面的 AJAX 应用程序包含一个 div 和一个按钮。

 div 部分用于显示来自服务器的信息。当按钮被点击时,它负责调用名为 loadXMLDoc() 的函数:

<!DOCTYPE html>      <html> <body>       <div id="myDiv"><h2>Let AJAX change this text</h2></div>        <button type="button" onclick="loadXMLDoc()">Change Content</button>        </body>        </html>

 接下来,在页面的 head 部分添加一个 <script> 标签。该标签中包含了这个 loadXMLDoc() 函数:

<head>        <script>        function loadXMLDoc(){        .... AJAX script goes here ...        }        </script>        </head>

 要创建AJAX实例,需要使用服务器端语言,例如Servlet,JSP,PHP,的ASP.Net等,这里我们使用JSP来说一下。

 创建AJAX的实例步骤:

  1. 加载org.json.jar文件
  2. 创建输入页面以接收任何文本或数字
  3. 创建服务器端页面以处理请求
  4. 在web.xml文件中提供条目 

AJAX与传统的CGI程序的区别


 在尝试AJAX示例时,没有不连续性并且您可以非常快速地获得响应,但是当您尝试标准GCI示例时,您将不得不等待响应并且您的页面也会得到刷新。

 在接下来的章节中,我们将会继续为您讲解AJAX的工作原理。

AJAX - 创建 XMLHttpRequest 对象


 XMLHttpRequest 是 AJAX 的基础。

 XMLHttpRequest 术语缩写为XHR,中文可以解释为可扩展超文本传输请求。

 XMLHttpRequest 对象可以在不向服务器提交整个页面的情况下,实现局部更新网页。

 XMLHttpRequest的对象用于客户端和服务器之间的异步通信。

 它执行以下操作:

  1. 在后台从客户端发送数据
  2. 从服务器接收数据
  3. 更新网页而不重新加载。

XMLHttpRequest 对象


 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。

 XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。


创建 XMLHttpRequest 对象


 所有现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest 对象。

 创建 XMLHttpRequest 对象的语法:

variable=new XMLHttpRequest();

 老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:

variable=new ActiveXObject("Microsoft.XMLHTTP");

 为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject ::

实例

var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

尝试一下 »

 现在,你已经学会如何创建 XMLHttpRequest 对象了(这是学习AJAX的基础),接下来,在下一章中,您将学习发送服务器请求的知识。

XMLHttpRequest对象的属性

XMLHttpRequest对象的常见属性如下:

属性描述
onreadystatechange
存储函数(或函数名),每当readyState的属性改变时,就会调用该函数。
readyState存有的XMLHttpRequest的状态从0到4发生变化。
0:请求未初始化
1:服务器连接已建立
2:请求已接收
3:请求处理中
4:请求已完成,且响应已就绪
responseText以文本形式返回响应。
responseXML以XML格式返回响应
status
将状态返回为数字(例如,“Not Found”为404,“OK”为200)
statusText
以字符串形式返回状态(例如,“Not Found”或“OK”)

XMLHttpRequest对象的方法

XMLHttpRequest对象的重要方法如下:

方法描述
abort()
取消当前请求
getAllResponseHeaders()
以字符串形式返回完整的HTTP标头集
getResponseHeader( headerName )
返回指定HTTP标头的值
void open(method,URL)打开指定获取或交的方法和URL的请求。
void open(method,URL,async)与上面相同,但指定异步或不。
void open(method,URL,asyncuserNamepassword
与上面相同,但指定用户名和密码。
void send(content)发送获取请求。
setRequestHeader( labelvalue
将标签/值对添加到要发送的HTTP标头。

相关文章


Ajax XMLHttpRequest


AJAX如何工作?


 AJAX 使用的 XMLHttpRequest 的对象与服务器通信。让我们尝试通过下面显示的图像了解 AJAX 的流程或 AJAX 的工作原理。



 正如您在上面的示例中所看到的,XMLHttpRequest对象起着重要作用。

  1. 用户从 UI 发送请求,JavaScript 中调用 XMLHttpRequest 对象。
  2. HTTP 请求由 XMLHttpRequest 对象发送到服务器。
  3. 服务器使用 JSPPHPServlet,ASP.net 等与数据库交互。
  4. 检索数据。
  5. 服务器将 XML 数据或 JSON 数据发送到 XMLHttpRequest 回调函数。
  6. HTMLCSS 数据显示在浏览器上。

向服务器发送请求


 XMLHttpRequest 对象用于和服务器交换数据。

 当你的页面全部加载完毕后,客户端会通过 XMLHttpRequest 对象向服务器请求数据,服务器端接受数据并处理后,向客户端反馈数据。

 如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的open()send()方法:

xmlhttp.open("GET","ajax_info.txt",true);        xmlhttp.send();


方法描述
open(method,url,async)

规定请求的类型、URL 以及是否异步处理请求。

  • method:请求的类型;GET 或 POST

  • url:文件在服务器上的位置

  • async:true(异步)或 false(同步)

send(string)

将请求发送到服务器。

  • string:仅用于 POST 请求


GET 还是 POST?


 与POST相比,GET 更简单也更快,并且在大部分情况下都能用。

 然而,在以下情况中,请使用POST请求:

  • 无法使用缓存文件(更新服务器上的文件或数据库)

  • 向服务器发送大量数据(POST没有数据量限制)

  • 发送包含未知字符的用户输入时,POSTGET更稳定也更可靠


GET 请求


 一个简单的GET请求:

实例

xmlhttp.open("GET","demo_get.html",true);
xmlhttp.send();

尝试一下 »

 在上面的例子中,您可能得到的是缓存的结果。

 为了避免这种情况,请向 URL 添加一个唯一的 ID:

实例

xmlhttp.open("GET","demo_get.html?t=" + Math.random(),true);
xmlhttp.send();

尝试一下 »

 如果您希望通过GET方法发送信息,请向 URL 添加信息:

实例

xmlhttp.open("GET","demo_get2.html?fname=Henry&lname=Ford",true);
xmlhttp.send();

尝试一下 »
?fname=Henry&lname=Ford为请求时传递的参数,指浏览器向服务器传递两个参数,一个为fname,值为Henry,一个为lname,值为Ford。在本实例中服务器只用到fname的参数,没有用到lname的参数。

提示:GET请求具有以下的几个特点:

  • GET请求可被缓存
  • GET请求保留在浏览器历史记录中
  • GET请求可被收藏为书签
  • GET请求不应在处理敏感数据时使用
  • GET请求有长度限制
  • GET请求只应当用于取回数据

POST 请求


 一个简单POST请求:

实例

xmlhttp.open("POST","demo_post.html",true);
xmlhttp.send();

尝试一下 »

 如果需要像 HTML 表单那样 POST 数据,请使用setRequestHeader()来添加 HTTP 头。然后在send()方法中规定您希望发送的数据:

实例

xmlhttp.open("POST","ajax_test.html",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Henry&lname=Ford");

尝试一下 »


方法描述
setRequestHeader(header,value)

向请求添加 HTTP 头。

  • header: 规定头的名称

  • value: 规定头的值

 提示:POST请求的特点如下:

  • POST请求不会被缓存
  • POST请求不会保留在浏览器历史记录中
  • POST请求不能被收藏为书签
  • POST请求对数据长度没有要求

url - 服务器上的文件


open()方法的url参数是服务器上文件的地址:

xmlhttp.open("GET","ajax_test.html",true);

 该文件可以是任何类型的文件,比如.txt.xml,或者服务器脚本文件,比如.asp.php(在传回响应之前,能够在服务器上执行任务)。


异步 - True 或 False?


 AJAX 指的是异步 JavaScriptXML(Asynchronous JavaScript and XML)。

 XMLHttpRequest 对象如果要用于 AJAX 的话,其open()方法的sync(async)参数必须设置为 true:

xmlhttp.open("GET","ajax_test.html",true);

 对于 web 开发人员来说,发送异步请求是一个巨大的进步。很多在服务器执行的任务都相当费时。AJAX 出现之前,这可能会引起应用程序挂起或停止。

 通过 AJAXJavaScript 无需等待服务器的响应,而是:

  • 在等待服务器响应时执行其他脚本

  • 当响应就绪后对响应进行处理


Async=true


 当使用 async=true 时,请规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数:

实例

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

尝试一下 »

 您将在稍后的章节学习更多有关 onreadystatechange 的内容。


Async = false


 如需使用 async=false,请将open()方法中的第三个参数改为 false:

xmlhttp.open(&quot;GET&quot;,&quot;test1.txt&quot;,false);

 我们不推荐使用 async=false,但是对于一些小型的请求,也是可以的。

 请记住,JavaScript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。

 注意:当您使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到send()语句后面即可:

实例

xmlhttp.open("GET","ajax_info.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

尝试一下 »

 以上就是 AJAX 通过 XMLHttpRequest 对象向服务器发送请求的介绍内容了,在下一章中,我们将继续学习 XHR 响应。


AJAX - 服务器响应


 由于 HTTP 响应是由服务端发出的,并且服务器做出响应需要时间(比如网速慢等原因),所以我们需要监听服务器响应的状态,然后才能进行处理。
  • 状态行
    xhr.status状态码,如200,304,404等;
  • 响应主体
    xhr.responseTextxhr.responseXML都表示响应主体。

 如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的responseTextresponseXML属性。

属性描述
responseText获得字符串形式的响应数据。
responseXML获得 XML 形式的响应数据。



responseText 属性

 如果来自服务器的响应并非 XML,请使用responseText属性。

 responseText属性返回字符串形式的响应,因此您可以这样使用:

实例

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

尝试一下 »

  提示:对于responseText属性,只有当 readyState属性值变为4时,responseText属性才可用,因为这表明AJAX请求已经结束!


responseXML 属性

 如果来自服务器的响应是 XML,而且需要作为 XML 对象进行解析,请使用responseXML属性:

实例

请求 cd_catalog.xml 文件,并解析响应:

xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
  {
  txt=txt + x[i].childNodes[0].nodeValue + "<br>";
  }
document.getElementById("myDiv").innerHTML=txt;

尝试一下 »


AJAX - onreadystatechange 事件


 当发送一个请求后,客户端需要确定这个请求什么时候会完成,因此,XMLHttpRequest对象提供了onreadystatechange事件机制来捕获请求的状态,继而实现响应。

 当请求被发送到服务器时,我们需要执行一些基于响应的任务。

 每当readyState改变时,就会触发onreadystatechange事件。

 readyState属性存有 XMLHttpRequest 的状态信息。

 下面是 XMLHttpRequest 对象的三个重要的属性:

属性描述
onreadystatechange存储函数(或函数名),每当readyState属性改变时,就会调用该函数。
readyState

存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

  • 0: 请求未初始化

  • 1: 服务器连接已建立

  • 2: 请求已接收

  • 3: 请求处理中

  • 4: 请求已完成,且响应已就绪

status200: "OK"
404: 未找到页面

readyState状态说明

 0:请求未初始化

 此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法进行未初始化作好准备,值为0表示对象已经存在,否则浏览器会报错:对象不存在。

 1:服务器连接已建立

 此阶段对XMLHttpRequest对象进行初始化,即调用open()方法,根据参数method,url,true完成对象状态的设置。并调用send()方法开始向服务端发送请求。

 值为1表示正在向服务端发送请求。

 2:请求已接收

 此阶段接收服务器端的响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。

 值为2表示已经接收完全部响应数据,并为下一阶段对数据解析作好准备。

 3:请求处理中

 此阶段解析接收到的服务器端响应数据即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBodyresponseTextresponseXML的属性存取的格式,为在客户端调用作好准备。

 状态3表示正在解析数据。

 4:请求已完成,且响应已就绪

 此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。值为4表示数据解析完毕,可以通过的XMLHttpRequest对象的属性取得数据。


 概而括之,整个XMLHttpRequest对象的生命周期应该包含如下阶段:

  1. 创建
  2. 初始化请求
  3. 发送请求
  4. 接收数据
  5. 解析数据
  6. 完成


 在onreadystatechange事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

 当readyState等于 4 且状态为 200 时,表示响应已就绪:

实例

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }

尝试一下 »

 注意:onreadystatechange事件被触发 5 次(0 - 4),对应着readyState的每个变化。

 提示:XHR.readyState状态的变化如下:

  • 0:请求未初始化,还没有调用 open()
  • 1:请求已经建立,但是还没有发送,还没有调用 send()。 
  • 2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。 
  • 3:请求在处理中;通常响应中已有部分数据可用了,没有全部完成。 
  • 4:响应已完成;您可以获取并使用服务器的响应了。

使用回调函数


 回调函数是一种以参数形式传递给另一个函数的函数。

 如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。

 该函数调用应该包含 URL 以及发生onreadystatechange事件时执行的任务(每次调用可能不尽相同):

实例

function myFunction()
{
loadXMLDoc("ajax_info.txt",function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  });
}

尝试一下 »

 在接下来的一个章节中,你将学习到与AJAX ASP/PHP相关的知识!


相关文章


 HTTP状态码


AJAX ASP/PHP 实例


 AJAX 用于创造动态性更强的应用程序。

 ASP:即Active Server Pages,是MicroSoft公司开发的服务器端脚本环境,可用来创建动态交互式网页并建立强大的web应用程序。

 PHP:即Hypertext Preprocessor,超文本预处理器,是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。

 本节将为你介绍与AJAX相关的几个ASP/PHP实例。


AJAX ASP/PHP 实例


 下面的例子将为您演示当用户在输入框中键入字符时,网页如何与 web 服务器进行通信: 请在下面的输入框中键入字母(A - Z):

实例

Start typing a name in the input field below:

First name:

Suggestions:


尝试一下 »

实例解析 - showHint() 函数


 当用户在上面的输入框中键入字符时,会执行函数 "showHint()" 。该函数由 "onkeyup" 事件触发:

function showHint(str)        {        var xmlhttp;        if (str.length==0)          {          document.getElementById("txtHint").innerHTML="";          return;          }        if (window.XMLHttpRequest)          {// code for IE7+, Firefox, Chrome, Opera, Safari          xmlhttp=new XMLHttpRequest();          }        else          {// code for IE6, IE5          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");          }        xmlhttp.onreadystatechange=function()          {          if (xmlhttp.readyState==4 && xmlhttp.status==200)            {            document.getElementById("txtHint").innerHTML=xmlhttp.responseText;            }          }        xmlhttp.open("GET","gethint.html?q="+str,true);        xmlhttp.send();        }

 源代码解析:

 如果输入框为空 (str.length==0),则该函数清空txtHint占位符的内容,并退出函数。

 如果输入框不为空,showHint()函数执行以下任务:

  • 创建 XMLHttpRequest 对象
  • 当服务器响应就绪时执行函数
  • 把请求发送到服务器上的文件
  • 请注意我们向 URL 添加了一个参数q(带有输入框的内容)

AJAX 服务器页面 - ASP 和 PHP


 由上面的 JavaScript 调用的服务器页面是 ASP 文件,名为 "gethint.asp"。

 下面,我们创建了两个版本的服务器文件,一个用 ASP 编写,另一个用 PHP 编写。


ASP 文件


 "gethint.asp" 中的源代码会检查一个名字数组,然后向浏览器返回相应的名字:

<%        response.expires=-1        dim a(30)        'Fill up array with names        a(1)="Anna"        a(2)="Brittany"a(3)="Cinderella"a(4)="Diana"        a(5)="Eva"        a(6)="Fiona"        a(7)="Gunda"        a(8)="Hege"        a(9)="Inga"        a(10)="Johanna"        a(11)="Kitty"        a(12)="Linda"        a(13)="Nina"        a(14)="Ophelia"        a(15)="Petunia"        a(16)="Amanda"        a(17)="Raquel"        a(18)="Cindy"        a(19)="Doris"        a(20)="Eve"        a(21)="Evita"        a(22)="Sunniva"        a(23)="Tove"        a(24)="Unni"        a(25)="Violet"        a(26)="Liza"        a(27)="Elizabeth"        a(28)="Ellen"        a(29)="Wenche"        a(30)="Vicky"        'get the q parameter from URL        q=ucase(request.querystring("q"))        'lookup all hints from array if length of q>0        if len(q)>0 then          hint=""          for i=1 to 30            if q=ucase(mid(a(i),1,len(q))) then              if hint="" then                hint=a(i)              else                hint=hint & " , " & a(i)              end if            end if          next        end if        'Output "no suggestion" if no hint were found        'or output the correct values        if hint="" then          response.write("no suggestion")        else          response.write(hint)        end if        %>

PHP 文件


 下面的代码用 PHP 编写,与上面的 ASP 代码作用是一样的。

<?php        // Fill up array with names        $a[]="Anna";        $a[]="Brittany";        $a[]="Cinderella";        $a[]="Diana";        $a[]="Eva";        $a[]="Fiona";        $a[]="Gunda";        $a[]="Hege";        $a[]="Inga";        $a[]="Johanna";        $a[]="Kitty";        $a[]="Linda";        $a[]="Nina";        $a[]="Ophelia";        $a[]="Petunia";        $a[]="Amanda";        $a[]="Raquel";        $a[]="Cindy";        $a[]="Doris";        $a[]="Eve";        $a[]="Evita";        $a[]="Sunniva";        $a[]="Tove";        $a[]="Unni";        $a[]="Violet";        $a[]="Liza";        $a[]="Elizabeth";       $a[]="Ellen";        $a[]="Wenche";        $a[]="Vicky";        //get the q parameter from URL        $q=$_GET["q"];        //lookup all hints from array if length of q>0        if (strlen($q) > 0)          {          $hint="";          for($i=0; $i<count($a); $i++)            {            if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))              {              if ($hint=="")                {                $hint=$a[$i];                }              else                {                $hint=$hint." , ".$a[$i];                }              }            }          }        // Set output to "no suggestion" if no hint were found        // or to the correct values        if ($hint == "")          {          $response="no suggestion";          }        else          {          $response=$hint;          }        //output the response        echo $response;        ?>

 在下一节内容中,我们将介绍 AJAX 数据库!


相关教程


 经典ASP教程

 PHP教程

AJAX 数据库


 数据库:数据库可视为电子化的文件柜-存储电子文件的处所,用户可以对文件中的数据进行新增,截取,更新,删除等操作。

 常见的型关系数据库有MySQL,SQLSERVER,Oracle,Sybase,DB2等。

 您可以在51coolma首页查找使用数据库的相关教程。

 AJAX 可用来与数据库进行动态通信。

 通过本节内容,你将了解 AJAX 动态加载数据库的相关知识。

AJAX 数据库实例

 下面的例子将演示网页如何通过 AJAX 从数据库读取信息:请在下面的下拉列表中选择一个客户:

Example

Select a customer:Alfreds FutterkisteNorth/SouthWolski Zajazd
Customer info will be listed here...

尝试一下 »

实例解释 - showCustomer() 函数


 当用户在上面的下拉列表中选择某个客户时,会执行名为 "showCustomer()" 的函数。该函数由 "onchange" 事件触发:

function showCustomer(str){var xmlhttp;if (str=="")  {  document.getElementById("txtHint").innerHTML="";  return;  }if (window.XMLHttpRequest)  {// code for IE7+, Firefox, Chrome, Opera, Safari  xmlhttp=new XMLHttpRequest();  }else  {// code for IE6, IE5  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  }xmlhttp.onreadystatechange=function()  {  if (xmlhttp.readyState==4 && xmlhttp.status==200)    {    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;    }  }xmlhttp.open("GET","getcustomer.html?q="+str,true);xmlhttp.send();}

 showCustomer() 函数执行以下任务:

  • 检查是否已选择某个客户

  • 创建 XMLHttpRequest 对象

  • 当服务器响应就绪时执行所创建的函数

  • 把请求发送到服务器上的文件

  • 请注意我们向 URL 添加了一个参数 q (带有输入域中的内容)


AJAX 服务器页面


 由上面的 JavaScript 调用的服务器页面是 PHP 文件,名为 "getcustomer.php"。

 用 PHP 编写服务器文件也很容易,或者用其他服务器语言。请看用 PHP 编写的相应的例子

 "getcustomer.php" 中的源代码负责对数据库进行查询,然后用 HTML 表格返回结果:

<%        response.expires=-1        sql="SELECT * FROM CUSTOMERS WHERE CUSTOMERID="        sql=sql & "'" & request.querystring("q") & "'"                set conn=Server.CreateObject("ADODB.Connection")        conn.Provider="Microsoft.Jet.OLEDB.4.0"        conn.Open(Server.Mappath("/db/northwind.mdb"))        set rs=Server.CreateObject("ADODB.recordset")        rs.Open sql,conn                response.write("<table>")        do until rs.EOF            for each x in rs.Fields                  response.write("<tr><td><b>" & x.name & "</b></td>")                  response.write("<td>" & x.value & "</td></tr>")            next            rs.MoveNext        loop        response.write("</table>")        %>


实例解释 - AJAX从数据库访问信息


 为了清楚地说明使用AJAX从数据库访问信息很容易,我们将动态构建MySQL查询并在“ajax.html”上显示结果。在开始前,让我们先做好基础工作,使用以下命令创建表。

 注:我们假设您有足够的权限执行以下MySQL操作。

CREATE TABLE 'ajax_example' (   'name' varchar(50) NOT NULL,   'age' int(11) NOT NULL,   'sex' varchar(1) NOT NULL,   'wpm' int(11) NOT NULL,   PRIMARY KEY  ('name'))

 现在使用以下SQL语句将以下数据转储到此表中:

INSERT INTO 'ajax_example' VALUES ('Jerry', 120, 'm', 20);INSERT INTO 'ajax_example' VALUES ('Regis', 75, 'm', 44);INSERT INTO 'ajax_example' VALUES ('Frank', 45, 'm', 87);INSERT INTO 'ajax_example' VALUES ('Jill', 22, 'f', 72);INSERT INTO 'ajax_example' VALUES ('Tracy', 27, 'f', 0);INSERT INTO 'ajax_example' VALUES ('Julie', 35, 'f', 90);

客户端HTML文件

 现在让我们拥有客户端HTML文件,即ajax.html,它将具有以下代码:

<html>   <body>      <script language = "javascript" type = "text/javascript">         <!--          //Browser Support Code         function ajaxFunction() {            var ajaxRequest;  // The variable that makes Ajax possible!                        try {                       // Opera 8.0+, Firefox, Safari               ajaxRequest = new XMLHttpRequest();            } catch (e) {                              // Internet Explorer Browsers               try {                  ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");               } catch (e) {                                    try {                     ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");                  } catch (e) {                     // Something went wrong                     alert("Your browser broke!");                     return false;                  }               }            }                        // Create a function that will receive data            // sent from the server and will update            // div section in the same page.            ajaxRequest.onreadystatechange = function() {                           if(ajaxRequest.readyState == 4) {                  var ajaxDisplay = document.getElementById('ajaxDiv');                  ajaxDisplay.innerHTML = ajaxRequest.responseText;               }            }                        // Now get the value from user and pass it to            // server script.            var age = document.getElementById('age').value;            var wpm = document.getElementById('wpm').value;            var sex = document.getElementById('sex').value;            var queryString = "?age = " + age ;                        queryString +=  "&wpm = " + wpm + "&sex = " + sex;            ajaxRequest.open("GET", "ajax-example.php" + queryString, true);            ajaxRequest.send(null);          }         //-->      </script>      <form name = 'myForm'>         Max Age: <input type = 'text' id = 'age' /> <br />         Max WPM: <input type = 'text' id = 'wpm' /> <br />         Sex:                   <select id = 'sex'>            <option value = "m">m</option>            <option value = "f">f</option>         </select>                  <input type = 'button' onclick = 'ajaxFunction()' value = 'Query MySQL'/>      </form>            <div id = 'ajaxDiv'>Your result will display here</div>   </body></html>

 注:在Query中传递变量的方式是根据HTTP标准并具有formA。

URL?variable1 = value1;&variable2 = value2;

 上面的代码将为您提供如下界面:


服务器端PHP文件

 您的客户端脚本已准备就绪。现在,我们必须编写我们的服务器端脚本,它将从数据库中获取age,wpm和sex,并将其发送回客户端。

 将以下代码放入文件“ajax-example.php”。

<?php$dbhost = "localhost";$dbuser = "dbusername";$dbpass = "dbpassword";$dbname = "dbname";	//Connect to MySQL Servermysql_connect($dbhost, $dbuser, $dbpass);	//Select Databasemysql_select_db($dbname) or die(mysql_error());	// Retrieve data from Query String$age = $_GET['age'];$sex = $_GET['sex'];$wpm = $_GET['wpm'];	// Escape User Input to help prevent SQL Injection$age = mysql_real_escape_string($age);$sex = mysql_real_escape_string($sex);$wpm = mysql_real_escape_string($wpm);	//build query$query = "SELECT * FROM ajax_example WHERE sex = '$sex'";if(is_numeric($age))   $query .= " AND age <= $age";if(is_numeric($wpm))   $query .= " AND wpm <= $wpm";	//Execute query$qry_result = mysql_query($query) or die(mysql_error());//Build Result String$display_string = "<table>";$display_string .= "<tr>";$display_string .= "<th>Name</th>";$display_string .= "<th>Age</th>";$display_string .= "<th>Sex</th>";$display_string .= "<th>WPM</th>";$display_string .= "</tr>";// Insert a new row in the table for each person returnedwhile($row = mysql_fetch_array($qry_result)) {   $display_string .= "<tr>";   $display_string .= "<td>$row[name]</td>";   $display_string .= "<td>$row[age]</td>";   $display_string .= "<td>$row[sex]</td>";   $display_string .= "<td>$row[wpm]</td>";   $display_string .= "</tr>";}echo "Query: " . $query . "<br />";$display_string .= "</table>";echo $display_string;?>

 现在尝试在Max Age或任何其他框中输入有效值(例如120),然后单击Query MySQL按钮。


数据库相关教程


SQL教程

Redis教程

MongoDB教程


AJAX XML 实例


 AJAX 可用来与 XML 文件进行交互式通信。

 本节通过解析实例来使你了解AJAX是如何读取XML文件的信息的!

 我们首先实例化或创建XMLHttpRequest(XHR)对象实例化或创建JavaScript的对象:

xhr = new XMLHttpRequest();

 但是,IE5和IE6不支持XMLHttpRequest,您需要以不同的方式实例化它:

xhr = new ActiveXObject ("Msxml2.XMLHTTP")

 注:Windows 10附带的Microsoft Edge默认Web浏览器自然支持XMLHttpRequest的。)

 因此,实例化XHR变得有点麻烦,你必须首先测试用户的浏览器如何支持它。

var xhr;if(window.XMLHttpRequest){ //适用于大多数现代Web浏览器    xhr = new XMLHttpRequest();}else(window.ActiveXObject){ //对于IE5,IE6    xhr = new ActiveXObject("Msxml2.XMLHTTP");}


AJAX XML 实例


 下面的例子将演示网页如何使用 AJAX 来读取来自 XML 文件的信息:

实例


尝试一下 »

实例解析 - loadXMLDoc() 函数


 当用户点击上面的"获得 CD 信息"这个按钮,就会执行loadXMLDoc()函数。

 loadXMLDoc()函数创建 XMLHttpRequest 对象,添加当服务器响应就绪时执行的函数,并将请求发送到服务器。

 当服务器响应就绪时,会构建一个 HTML 表格,从 XML 文件中提取节点(元素),最后使用已经填充了 XML 数据的 HTML 表格来更新txtCDInfo占位符:

function loadXMLDoc(url) { var xmlhttp; var txt,xx,x,i; if (window.XMLHttpRequest)   {// code for IE7+, Firefox, Chrome, Opera, Safari   xmlhttp=new XMLHttpRequest();   } else   {// code for IE6, IE5   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");   } xmlhttp.onreadystatechange=function()   {   if (xmlhttp.readyState==4 && xmlhttp.status==200)     {     txt="<table border='1'><tr><th>Title</th><th>Artist</th></tr>";     x=xmlhttp.responseXML.documentElement.getElementsByTagName("CD");     for (i=0;i<x.length;i++)       {       txt=txt + "<tr>";       xx=x[i].getElementsByTagName("TITLE");         {         try           {           txt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";           }         catch (er)           {           txt=txt + "<td>&nbsp;</td>";           }         }     xx=x[i].getElementsByTagName("ARTIST");       {         try           {           txt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";           }         catch (er)           {           txt=txt + "<td>&nbsp;</td>";           }         }       txt=txt + "</tr>";       }     txt=txt + "</table>";     document.getElementById('txtCDInfo').innerHTML=txt;     }   } xmlhttp.open("GET",url,true); xmlhttp.send(); }

AJAX 服务器页面


 上面这个例子中使用的服务器页面实际上是一个名为 "cd_catalog.xml" XML 文件。

相关教程

 XML教程

 XML DOM教程


AJAX 实例


实例

AJAX 实例

 一个简单的AJAX实例

 创建一个简单的XMLHttpRequest,从一个TXT文件中返回数据。

 用AJAX加载 XML 文件

 创建一个简单的XMLHttpRequest,从一个XML文件中返回数据。

 用AJAX进行一次 HEAD 请求

 检索资源(文件)的头信息。

 用AJAX进行一次指定的 HEAD 请求

 检索资源(文件)的指定头信息。

 用AJAX从ASP 文件返回数据

 当用户在文本框内键入字符时网页如何与Web服务器进行通信

 用AJAX从数据库返回数据

 用AJAX网页如何获取数据库中的信息

 用AJAX从XML 文件返回数据

 创建一个XMLHttpRequest从XML文件中检索数据并显示在一个HTML表格中。

 用callback函数的AJAX实例

 用一个callback函数创建一个XMLHttpRequest,并从一个TXT文件中检索数据。

AJAX 教程


 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

 AJAX 教程涵盖了适用于初学者和专业人士的AJAX技术的概念和示例。

 AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

 AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

 AJAX 允许您仅将重要信息发送到服务器而不是整个页面。因此,只有来自客户端的有价值数据才会路由到服务器端。它使您的应用程序具有交互性和更快。


AJAX 实例

使用 AJAX 修改该文本内容


尝试一下 »


在哪里使用?

 Web上运行的Web应用程序大多使用的是ajax技术,如gmail,facebook,twitter,google map,youtube等。

 现在开始学习 AJAX !


AJAX 简介


 AJAX 可以用于创建快速动态的网页。

 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。


您应当具备的基础知识


 在继续学习之前,您需要对下面的知识有基本的了解:

  • HTML / XHTML

  • CSS

  • JavaScript / DOM

 如果您希望首先学习这些项目,请在我们的首页访问这些教程。


什么是 AJAX ?


 AJAX = 异步 JavaScript 和 XML。

 AJAX 是一种用于创建快速动态网页的技术。

 AJAX 是一种借助XML,HTML,CSS和Java Script创建更好,更快,更交互的Web应用程序的新技术。

 AJAX 是一种独立于Web服务器软件的Web浏览器技术。

 AJAX 使用XHTML作为内容,CSS使用文档对象模型和JavaScript进行动态内容显示。

 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

 传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。

 使用AJAX,当您点击提交时,JavaScript将向服务器发出请求,解释结果并更新当前屏幕。

 当客户端程序在后台请求来自服务器的信息时,用户可以继续使用该应用程序。

 数据驱动而不是页面驱动。

 有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。

注意:Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。

AJAX 工作原理


AJAX


AJAX是基于现有的Internet标准


 AJAX是基于现有的Internet标准,并且联合使用它们:

  • XMLHttpRequest 对象 (异步的与服务器交换数据)

  • JavaScript/DOM (信息显示/交互)

  • CSS (给数据定义样式)

  • XML (作为转换数据的格式)

lamp  AJAX应用程序与浏览器和平台无关的!


Google Suggest


 在 2005 年,Google 通过其 Google Suggest 使 AJAX 变得流行起来。

 Google Suggest 使用 AJAX 创造出动态性极强的 web 界面:当您在谷歌的搜索框输入关键字时,JavaScript 会把这些字符发送到服务器,然后服务器会返回一个搜索建议的列表。


今天就开始使用 AJAX


 AJAX 基于已有的标准。这些标准已被大多数开发者使用多年。

 现在你已经对AJAX有了初步的了解,那么请你继续阅读下一章,来看看 AJAX 是如何工作的!

AJAX 实例


 AJAX的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。

 为了帮助您理解 AJAX 的工作原理,我们创建了一个小型的 AJAX 应用程序:

实例

使用 AJAX 修改该文本内容


尝试一下 »

AJAX 实例解析


 上面的 AJAX 应用程序包含一个 div 和一个按钮。

 div 部分用于显示来自服务器的信息。当按钮被点击时,它负责调用名为 loadXMLDoc() 的函数:

<!DOCTYPE html>      <html> <body>       <div id="myDiv"><h2>Let AJAX change this text</h2></div>        <button type="button" onclick="loadXMLDoc()">Change Content</button>        </body>        </html>

 接下来,在页面的 head 部分添加一个 <script> 标签。该标签中包含了这个 loadXMLDoc() 函数:

<head>        <script>        function loadXMLDoc(){        .... AJAX script goes here ...        }        </script>        </head>

 要创建AJAX实例,需要使用服务器端语言,例如Servlet,JSP,PHP,的ASP.Net等,这里我们使用JSP来说一下。

 创建AJAX的实例步骤:

  1. 加载org.json.jar文件
  2. 创建输入页面以接收任何文本或数字
  3. 创建服务器端页面以处理请求
  4. 在web.xml文件中提供条目 

AJAX与传统的CGI程序的区别


 在尝试AJAX示例时,没有不连续性并且您可以非常快速地获得响应,但是当您尝试标准GCI示例时,您将不得不等待响应并且您的页面也会得到刷新。

 在接下来的章节中,我们将会继续为您讲解AJAX的工作原理。

AJAX - 创建 XMLHttpRequest 对象


 XMLHttpRequest 是 AJAX 的基础。

 XMLHttpRequest 术语缩写为XHR,中文可以解释为可扩展超文本传输请求。

 XMLHttpRequest 对象可以在不向服务器提交整个页面的情况下,实现局部更新网页。

 XMLHttpRequest的对象用于客户端和服务器之间的异步通信。

 它执行以下操作:

  1. 在后台从客户端发送数据
  2. 从服务器接收数据
  3. 更新网页而不重新加载。

XMLHttpRequest 对象


 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。

 XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。


创建 XMLHttpRequest 对象


 所有现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest 对象。

 创建 XMLHttpRequest 对象的语法:

variable=new XMLHttpRequest();

 老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:

variable=new ActiveXObject("Microsoft.XMLHTTP");

 为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject ::

实例

var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

尝试一下 »

 现在,你已经学会如何创建 XMLHttpRequest 对象了(这是学习AJAX的基础),接下来,在下一章中,您将学习发送服务器请求的知识。

XMLHttpRequest对象的属性

XMLHttpRequest对象的常见属性如下:

属性描述
onreadystatechange
存储函数(或函数名),每当readyState的属性改变时,就会调用该函数。
readyState存有的XMLHttpRequest的状态从0到4发生变化。
0:请求未初始化
1:服务器连接已建立
2:请求已接收
3:请求处理中
4:请求已完成,且响应已就绪
responseText以文本形式返回响应。
responseXML以XML格式返回响应
status
将状态返回为数字(例如,“Not Found”为404,“OK”为200)
statusText
以字符串形式返回状态(例如,“Not Found”或“OK”)

XMLHttpRequest对象的方法

XMLHttpRequest对象的重要方法如下:

方法描述
abort()
取消当前请求
getAllResponseHeaders()
以字符串形式返回完整的HTTP标头集
getResponseHeader( headerName )
返回指定HTTP标头的值
void open(method,URL)打开指定获取或交的方法和URL的请求。
void open(method,URL,async)与上面相同,但指定异步或不。
void open(method,URL,asyncuserNamepassword
与上面相同,但指定用户名和密码。
void send(content)发送获取请求。
setRequestHeader( labelvalue
将标签/值对添加到要发送的HTTP标头。

相关文章


Ajax XMLHttpRequest


AJAX如何工作?


 AJAX 使用的 XMLHttpRequest 的对象与服务器通信。让我们尝试通过下面显示的图像了解 AJAX 的流程或 AJAX 的工作原理。



 正如您在上面的示例中所看到的,XMLHttpRequest对象起着重要作用。

  1. 用户从 UI 发送请求,JavaScript 中调用 XMLHttpRequest 对象。
  2. HTTP 请求由 XMLHttpRequest 对象发送到服务器。
  3. 服务器使用 JSPPHPServlet,ASP.net 等与数据库交互。
  4. 检索数据。
  5. 服务器将 XML 数据或 JSON 数据发送到 XMLHttpRequest 回调函数。
  6. HTMLCSS 数据显示在浏览器上。

向服务器发送请求


 XMLHttpRequest 对象用于和服务器交换数据。

 当你的页面全部加载完毕后,客户端会通过 XMLHttpRequest 对象向服务器请求数据,服务器端接受数据并处理后,向客户端反馈数据。

 如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的open()send()方法:

xmlhttp.open("GET","ajax_info.txt",true);        xmlhttp.send();


方法描述
open(method,url,async)

规定请求的类型、URL 以及是否异步处理请求。

  • method:请求的类型;GET 或 POST

  • url:文件在服务器上的位置

  • async:true(异步)或 false(同步)

send(string)

将请求发送到服务器。

  • string:仅用于 POST 请求


GET 还是 POST?


 与POST相比,GET 更简单也更快,并且在大部分情况下都能用。

 然而,在以下情况中,请使用POST请求:

  • 无法使用缓存文件(更新服务器上的文件或数据库)

  • 向服务器发送大量数据(POST没有数据量限制)

  • 发送包含未知字符的用户输入时,POSTGET更稳定也更可靠


GET 请求


 一个简单的GET请求:

实例

xmlhttp.open("GET","demo_get.html",true);
xmlhttp.send();

尝试一下 »

 在上面的例子中,您可能得到的是缓存的结果。

 为了避免这种情况,请向 URL 添加一个唯一的 ID:

实例

xmlhttp.open("GET","demo_get.html?t=" + Math.random(),true);
xmlhttp.send();

尝试一下 »

 如果您希望通过GET方法发送信息,请向 URL 添加信息:

实例

xmlhttp.open("GET","demo_get2.html?fname=Henry&lname=Ford",true);
xmlhttp.send();

尝试一下 »
?fname=Henry&lname=Ford为请求时传递的参数,指浏览器向服务器传递两个参数,一个为fname,值为Henry,一个为lname,值为Ford。在本实例中服务器只用到fname的参数,没有用到lname的参数。

提示:GET请求具有以下的几个特点:

  • GET请求可被缓存
  • GET请求保留在浏览器历史记录中
  • GET请求可被收藏为书签
  • GET请求不应在处理敏感数据时使用
  • GET请求有长度限制
  • GET请求只应当用于取回数据

POST 请求


 一个简单POST请求:

实例

xmlhttp.open("POST","demo_post.html",true);
xmlhttp.send();

尝试一下 »

 如果需要像 HTML 表单那样 POST 数据,请使用setRequestHeader()来添加 HTTP 头。然后在send()方法中规定您希望发送的数据:

实例

xmlhttp.open("POST","ajax_test.html",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Henry&lname=Ford");

尝试一下 »


方法描述
setRequestHeader(header,value)

向请求添加 HTTP 头。

  • header: 规定头的名称

  • value: 规定头的值

 提示:POST请求的特点如下:

  • POST请求不会被缓存
  • POST请求不会保留在浏览器历史记录中
  • POST请求不能被收藏为书签
  • POST请求对数据长度没有要求

url - 服务器上的文件


open()方法的url参数是服务器上文件的地址:

xmlhttp.open("GET","ajax_test.html",true);

 该文件可以是任何类型的文件,比如.txt.xml,或者服务器脚本文件,比如.asp.php(在传回响应之前,能够在服务器上执行任务)。


异步 - True 或 False?


 AJAX 指的是异步 JavaScriptXML(Asynchronous JavaScript and XML)。

 XMLHttpRequest 对象如果要用于 AJAX 的话,其open()方法的sync(async)参数必须设置为 true:

xmlhttp.open("GET","ajax_test.html",true);

 对于 web 开发人员来说,发送异步请求是一个巨大的进步。很多在服务器执行的任务都相当费时。AJAX 出现之前,这可能会引起应用程序挂起或停止。

 通过 AJAXJavaScript 无需等待服务器的响应,而是:

  • 在等待服务器响应时执行其他脚本

  • 当响应就绪后对响应进行处理


Async=true


 当使用 async=true 时,请规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数:

实例

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

尝试一下 »

 您将在稍后的章节学习更多有关 onreadystatechange 的内容。


Async = false


 如需使用 async=false,请将open()方法中的第三个参数改为 false:

xmlhttp.open(&quot;GET&quot;,&quot;test1.txt&quot;,false);

 我们不推荐使用 async=false,但是对于一些小型的请求,也是可以的。

 请记住,JavaScript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。

 注意:当您使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到send()语句后面即可:

实例

xmlhttp.open("GET","ajax_info.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

尝试一下 »

 以上就是 AJAX 通过 XMLHttpRequest 对象向服务器发送请求的介绍内容了,在下一章中,我们将继续学习 XHR 响应。


AJAX - 服务器响应


 由于 HTTP 响应是由服务端发出的,并且服务器做出响应需要时间(比如网速慢等原因),所以我们需要监听服务器响应的状态,然后才能进行处理。
  • 状态行
    xhr.status状态码,如200,304,404等;
  • 响应主体
    xhr.responseTextxhr.responseXML都表示响应主体。

 如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的responseTextresponseXML属性。

属性描述
responseText获得字符串形式的响应数据。
responseXML获得 XML 形式的响应数据。



responseText 属性

 如果来自服务器的响应并非 XML,请使用responseText属性。

 responseText属性返回字符串形式的响应,因此您可以这样使用:

实例

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

尝试一下 »

  提示:对于responseText属性,只有当 readyState属性值变为4时,responseText属性才可用,因为这表明AJAX请求已经结束!


responseXML 属性

 如果来自服务器的响应是 XML,而且需要作为 XML 对象进行解析,请使用responseXML属性:

实例

请求 cd_catalog.xml 文件,并解析响应:

xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
  {
  txt=txt + x[i].childNodes[0].nodeValue + "<br>";
  }
document.getElementById("myDiv").innerHTML=txt;

尝试一下 »


AJAX - onreadystatechange 事件


 当发送一个请求后,客户端需要确定这个请求什么时候会完成,因此,XMLHttpRequest对象提供了onreadystatechange事件机制来捕获请求的状态,继而实现响应。

 当请求被发送到服务器时,我们需要执行一些基于响应的任务。

 每当readyState改变时,就会触发onreadystatechange事件。

 readyState属性存有 XMLHttpRequest 的状态信息。

 下面是 XMLHttpRequest 对象的三个重要的属性:

属性描述
onreadystatechange存储函数(或函数名),每当readyState属性改变时,就会调用该函数。
readyState

存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

  • 0: 请求未初始化

  • 1: 服务器连接已建立

  • 2: 请求已接收

  • 3: 请求处理中

  • 4: 请求已完成,且响应已就绪

status200: "OK"
404: 未找到页面

readyState状态说明

 0:请求未初始化

 此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法进行未初始化作好准备,值为0表示对象已经存在,否则浏览器会报错:对象不存在。

 1:服务器连接已建立

 此阶段对XMLHttpRequest对象进行初始化,即调用open()方法,根据参数method,url,true完成对象状态的设置。并调用send()方法开始向服务端发送请求。

 值为1表示正在向服务端发送请求。

 2:请求已接收

 此阶段接收服务器端的响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。

 值为2表示已经接收完全部响应数据,并为下一阶段对数据解析作好准备。

 3:请求处理中

 此阶段解析接收到的服务器端响应数据即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBodyresponseTextresponseXML的属性存取的格式,为在客户端调用作好准备。

 状态3表示正在解析数据。

 4:请求已完成,且响应已就绪

 此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。值为4表示数据解析完毕,可以通过的XMLHttpRequest对象的属性取得数据。


 概而括之,整个XMLHttpRequest对象的生命周期应该包含如下阶段:

  1. 创建
  2. 初始化请求
  3. 发送请求
  4. 接收数据
  5. 解析数据
  6. 完成


 在onreadystatechange事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

 当readyState等于 4 且状态为 200 时,表示响应已就绪:

实例

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }

尝试一下 »

 注意:onreadystatechange事件被触发 5 次(0 - 4),对应着readyState的每个变化。

 提示:XHR.readyState状态的变化如下:

  • 0:请求未初始化,还没有调用 open()
  • 1:请求已经建立,但是还没有发送,还没有调用 send()。 
  • 2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。 
  • 3:请求在处理中;通常响应中已有部分数据可用了,没有全部完成。 
  • 4:响应已完成;您可以获取并使用服务器的响应了。

使用回调函数


 回调函数是一种以参数形式传递给另一个函数的函数。

 如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。

 该函数调用应该包含 URL 以及发生onreadystatechange事件时执行的任务(每次调用可能不尽相同):

实例

function myFunction()
{
loadXMLDoc("ajax_info.txt",function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  });
}

尝试一下 »

 在接下来的一个章节中,你将学习到与AJAX ASP/PHP相关的知识!


相关文章


 HTTP状态码


AJAX ASP/PHP 实例


 AJAX 用于创造动态性更强的应用程序。

 ASP:即Active Server Pages,是MicroSoft公司开发的服务器端脚本环境,可用来创建动态交互式网页并建立强大的web应用程序。

 PHP:即Hypertext Preprocessor,超文本预处理器,是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。

 本节将为你介绍与AJAX相关的几个ASP/PHP实例。


AJAX ASP/PHP 实例


 下面的例子将为您演示当用户在输入框中键入字符时,网页如何与 web 服务器进行通信: 请在下面的输入框中键入字母(A - Z):

实例

Start typing a name in the input field below:

First name:

Suggestions:


尝试一下 »

实例解析 - showHint() 函数


 当用户在上面的输入框中键入字符时,会执行函数 "showHint()" 。该函数由 "onkeyup" 事件触发:

function showHint(str)        {        var xmlhttp;        if (str.length==0)          {          document.getElementById("txtHint").innerHTML="";          return;          }        if (window.XMLHttpRequest)          {// code for IE7+, Firefox, Chrome, Opera, Safari          xmlhttp=new XMLHttpRequest();          }        else          {// code for IE6, IE5          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");          }        xmlhttp.onreadystatechange=function()          {          if (xmlhttp.readyState==4 && xmlhttp.status==200)            {            document.getElementById("txtHint").innerHTML=xmlhttp.responseText;            }          }        xmlhttp.open("GET","gethint.html?q="+str,true);        xmlhttp.send();        }

 源代码解析:

 如果输入框为空 (str.length==0),则该函数清空txtHint占位符的内容,并退出函数。

 如果输入框不为空,showHint()函数执行以下任务:

  • 创建 XMLHttpRequest 对象
  • 当服务器响应就绪时执行函数
  • 把请求发送到服务器上的文件
  • 请注意我们向 URL 添加了一个参数q(带有输入框的内容)

AJAX 服务器页面 - ASP 和 PHP


 由上面的 JavaScript 调用的服务器页面是 ASP 文件,名为 "gethint.asp"。

 下面,我们创建了两个版本的服务器文件,一个用 ASP 编写,另一个用 PHP 编写。


ASP 文件


 "gethint.asp" 中的源代码会检查一个名字数组,然后向浏览器返回相应的名字:

<%        response.expires=-1        dim a(30)        'Fill up array with names        a(1)="Anna"        a(2)="Brittany"a(3)="Cinderella"a(4)="Diana"        a(5)="Eva"        a(6)="Fiona"        a(7)="Gunda"        a(8)="Hege"        a(9)="Inga"        a(10)="Johanna"        a(11)="Kitty"        a(12)="Linda"        a(13)="Nina"        a(14)="Ophelia"        a(15)="Petunia"        a(16)="Amanda"        a(17)="Raquel"        a(18)="Cindy"        a(19)="Doris"        a(20)="Eve"        a(21)="Evita"        a(22)="Sunniva"        a(23)="Tove"        a(24)="Unni"        a(25)="Violet"        a(26)="Liza"        a(27)="Elizabeth"        a(28)="Ellen"        a(29)="Wenche"        a(30)="Vicky"        'get the q parameter from URL        q=ucase(request.querystring("q"))        'lookup all hints from array if length of q>0        if len(q)>0 then          hint=""          for i=1 to 30            if q=ucase(mid(a(i),1,len(q))) then              if hint="" then                hint=a(i)              else                hint=hint & " , " & a(i)              end if            end if          next        end if        'Output "no suggestion" if no hint were found        'or output the correct values        if hint="" then          response.write("no suggestion")        else          response.write(hint)        end if        %>

PHP 文件


 下面的代码用 PHP 编写,与上面的 ASP 代码作用是一样的。

<?php        // Fill up array with names        $a[]="Anna";        $a[]="Brittany";        $a[]="Cinderella";        $a[]="Diana";        $a[]="Eva";        $a[]="Fiona";        $a[]="Gunda";        $a[]="Hege";        $a[]="Inga";        $a[]="Johanna";        $a[]="Kitty";        $a[]="Linda";        $a[]="Nina";        $a[]="Ophelia";        $a[]="Petunia";        $a[]="Amanda";        $a[]="Raquel";        $a[]="Cindy";        $a[]="Doris";        $a[]="Eve";        $a[]="Evita";        $a[]="Sunniva";        $a[]="Tove";        $a[]="Unni";        $a[]="Violet";        $a[]="Liza";        $a[]="Elizabeth";       $a[]="Ellen";        $a[]="Wenche";        $a[]="Vicky";        //get the q parameter from URL        $q=$_GET["q"];        //lookup all hints from array if length of q>0        if (strlen($q) > 0)          {          $hint="";          for($i=0; $i<count($a); $i++)            {            if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))              {              if ($hint=="")                {                $hint=$a[$i];                }              else                {                $hint=$hint." , ".$a[$i];                }              }            }          }        // Set output to "no suggestion" if no hint were found        // or to the correct values        if ($hint == "")          {          $response="no suggestion";          }        else          {          $response=$hint;          }        //output the response        echo $response;        ?>

 在下一节内容中,我们将介绍 AJAX 数据库!


相关教程


 经典ASP教程

 PHP教程

AJAX 数据库


 数据库:数据库可视为电子化的文件柜-存储电子文件的处所,用户可以对文件中的数据进行新增,截取,更新,删除等操作。

 常见的型关系数据库有MySQL,SQLSERVER,Oracle,Sybase,DB2等。

 您可以在51coolma首页查找使用数据库的相关教程。

 AJAX 可用来与数据库进行动态通信。

 通过本节内容,你将了解 AJAX 动态加载数据库的相关知识。

AJAX 数据库实例

 下面的例子将演示网页如何通过 AJAX 从数据库读取信息:请在下面的下拉列表中选择一个客户:

Example

Select a customer:Alfreds FutterkisteNorth/SouthWolski Zajazd
Customer info will be listed here...

尝试一下 »

实例解释 - showCustomer() 函数


 当用户在上面的下拉列表中选择某个客户时,会执行名为 "showCustomer()" 的函数。该函数由 "onchange" 事件触发:

function showCustomer(str){var xmlhttp;if (str=="")  {  document.getElementById("txtHint").innerHTML="";  return;  }if (window.XMLHttpRequest)  {// code for IE7+, Firefox, Chrome, Opera, Safari  xmlhttp=new XMLHttpRequest();  }else  {// code for IE6, IE5  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  }xmlhttp.onreadystatechange=function()  {  if (xmlhttp.readyState==4 && xmlhttp.status==200)    {    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;    }  }xmlhttp.open("GET","getcustomer.html?q="+str,true);xmlhttp.send();}

 showCustomer() 函数执行以下任务:

  • 检查是否已选择某个客户

  • 创建 XMLHttpRequest 对象

  • 当服务器响应就绪时执行所创建的函数

  • 把请求发送到服务器上的文件

  • 请注意我们向 URL 添加了一个参数 q (带有输入域中的内容)


AJAX 服务器页面


 由上面的 JavaScript 调用的服务器页面是 PHP 文件,名为 "getcustomer.php"。

 用 PHP 编写服务器文件也很容易,或者用其他服务器语言。请看用 PHP 编写的相应的例子

 "getcustomer.php" 中的源代码负责对数据库进行查询,然后用 HTML 表格返回结果:

<%        response.expires=-1        sql="SELECT * FROM CUSTOMERS WHERE CUSTOMERID="        sql=sql & "'" & request.querystring("q") & "'"                set conn=Server.CreateObject("ADODB.Connection")        conn.Provider="Microsoft.Jet.OLEDB.4.0"        conn.Open(Server.Mappath("/db/northwind.mdb"))        set rs=Server.CreateObject("ADODB.recordset")        rs.Open sql,conn                response.write("<table>")        do until rs.EOF            for each x in rs.Fields                  response.write("<tr><td><b>" & x.name & "</b></td>")                  response.write("<td>" & x.value & "</td></tr>")            next            rs.MoveNext        loop        response.write("</table>")        %>


实例解释 - AJAX从数据库访问信息


 为了清楚地说明使用AJAX从数据库访问信息很容易,我们将动态构建MySQL查询并在“ajax.html”上显示结果。在开始前,让我们先做好基础工作,使用以下命令创建表。

 注:我们假设您有足够的权限执行以下MySQL操作。

CREATE TABLE 'ajax_example' (   'name' varchar(50) NOT NULL,   'age' int(11) NOT NULL,   'sex' varchar(1) NOT NULL,   'wpm' int(11) NOT NULL,   PRIMARY KEY  ('name'))

 现在使用以下SQL语句将以下数据转储到此表中:

INSERT INTO 'ajax_example' VALUES ('Jerry', 120, 'm', 20);INSERT INTO 'ajax_example' VALUES ('Regis', 75, 'm', 44);INSERT INTO 'ajax_example' VALUES ('Frank', 45, 'm', 87);INSERT INTO 'ajax_example' VALUES ('Jill', 22, 'f', 72);INSERT INTO 'ajax_example' VALUES ('Tracy', 27, 'f', 0);INSERT INTO 'ajax_example' VALUES ('Julie', 35, 'f', 90);

客户端HTML文件

 现在让我们拥有客户端HTML文件,即ajax.html,它将具有以下代码:

<html>   <body>      <script language = "javascript" type = "text/javascript">         <!--          //Browser Support Code         function ajaxFunction() {            var ajaxRequest;  // The variable that makes Ajax possible!                        try {                       // Opera 8.0+, Firefox, Safari               ajaxRequest = new XMLHttpRequest();            } catch (e) {                              // Internet Explorer Browsers               try {                  ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");               } catch (e) {                                    try {                     ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");                  } catch (e) {                     // Something went wrong                     alert("Your browser broke!");                     return false;                  }               }            }                        // Create a function that will receive data            // sent from the server and will update            // div section in the same page.            ajaxRequest.onreadystatechange = function() {                           if(ajaxRequest.readyState == 4) {                  var ajaxDisplay = document.getElementById('ajaxDiv');                  ajaxDisplay.innerHTML = ajaxRequest.responseText;               }            }                        // Now get the value from user and pass it to            // server script.            var age = document.getElementById('age').value;            var wpm = document.getElementById('wpm').value;            var sex = document.getElementById('sex').value;            var queryString = "?age = " + age ;                        queryString +=  "&wpm = " + wpm + "&sex = " + sex;            ajaxRequest.open("GET", "ajax-example.php" + queryString, true);            ajaxRequest.send(null);          }         //-->      </script>      <form name = 'myForm'>         Max Age: <input type = 'text' id = 'age' /> <br />         Max WPM: <input type = 'text' id = 'wpm' /> <br />         Sex:                   <select id = 'sex'>            <option value = "m">m</option>            <option value = "f">f</option>         </select>                  <input type = 'button' onclick = 'ajaxFunction()' value = 'Query MySQL'/>      </form>            <div id = 'ajaxDiv'>Your result will display here</div>   </body></html>

 注:在Query中传递变量的方式是根据HTTP标准并具有formA。

URL?variable1 = value1;&variable2 = value2;

 上面的代码将为您提供如下界面:


服务器端PHP文件

 您的客户端脚本已准备就绪。现在,我们必须编写我们的服务器端脚本,它将从数据库中获取age,wpm和sex,并将其发送回客户端。

 将以下代码放入文件“ajax-example.php”。

<?php$dbhost = "localhost";$dbuser = "dbusername";$dbpass = "dbpassword";$dbname = "dbname";	//Connect to MySQL Servermysql_connect($dbhost, $dbuser, $dbpass);	//Select Databasemysql_select_db($dbname) or die(mysql_error());	// Retrieve data from Query String$age = $_GET['age'];$sex = $_GET['sex'];$wpm = $_GET['wpm'];	// Escape User Input to help prevent SQL Injection$age = mysql_real_escape_string($age);$sex = mysql_real_escape_string($sex);$wpm = mysql_real_escape_string($wpm);	//build query$query = "SELECT * FROM ajax_example WHERE sex = '$sex'";if(is_numeric($age))   $query .= " AND age <= $age";if(is_numeric($wpm))   $query .= " AND wpm <= $wpm";	//Execute query$qry_result = mysql_query($query) or die(mysql_error());//Build Result String$display_string = "<table>";$display_string .= "<tr>";$display_string .= "<th>Name</th>";$display_string .= "<th>Age</th>";$display_string .= "<th>Sex</th>";$display_string .= "<th>WPM</th>";$display_string .= "</tr>";// Insert a new row in the table for each person returnedwhile($row = mysql_fetch_array($qry_result)) {   $display_string .= "<tr>";   $display_string .= "<td>$row[name]</td>";   $display_string .= "<td>$row[age]</td>";   $display_string .= "<td>$row[sex]</td>";   $display_string .= "<td>$row[wpm]</td>";   $display_string .= "</tr>";}echo "Query: " . $query . "<br />";$display_string .= "</table>";echo $display_string;?>

 现在尝试在Max Age或任何其他框中输入有效值(例如120),然后单击Query MySQL按钮。


数据库相关教程


SQL教程

Redis教程

MongoDB教程


AJAX XML 实例


 AJAX 可用来与 XML 文件进行交互式通信。

 本节通过解析实例来使你了解AJAX是如何读取XML文件的信息的!

 我们首先实例化或创建XMLHttpRequest(XHR)对象实例化或创建JavaScript的对象:

xhr = new XMLHttpRequest();

 但是,IE5和IE6不支持XMLHttpRequest,您需要以不同的方式实例化它:

xhr = new ActiveXObject ("Msxml2.XMLHTTP")

 注:Windows 10附带的Microsoft Edge默认Web浏览器自然支持XMLHttpRequest的。)

 因此,实例化XHR变得有点麻烦,你必须首先测试用户的浏览器如何支持它。

var xhr;if(window.XMLHttpRequest){ //适用于大多数现代Web浏览器    xhr = new XMLHttpRequest();}else(window.ActiveXObject){ //对于IE5,IE6    xhr = new ActiveXObject("Msxml2.XMLHTTP");}


AJAX XML 实例


 下面的例子将演示网页如何使用 AJAX 来读取来自 XML 文件的信息:

实例


尝试一下 »

实例解析 - loadXMLDoc() 函数


 当用户点击上面的"获得 CD 信息"这个按钮,就会执行loadXMLDoc()函数。

 loadXMLDoc()函数创建 XMLHttpRequest 对象,添加当服务器响应就绪时执行的函数,并将请求发送到服务器。

 当服务器响应就绪时,会构建一个 HTML 表格,从 XML 文件中提取节点(元素),最后使用已经填充了 XML 数据的 HTML 表格来更新txtCDInfo占位符:

function loadXMLDoc(url) { var xmlhttp; var txt,xx,x,i; if (window.XMLHttpRequest)   {// code for IE7+, Firefox, Chrome, Opera, Safari   xmlhttp=new XMLHttpRequest();   } else   {// code for IE6, IE5   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");   } xmlhttp.onreadystatechange=function()   {   if (xmlhttp.readyState==4 && xmlhttp.status==200)     {     txt="<table border='1'><tr><th>Title</th><th>Artist</th></tr>";     x=xmlhttp.responseXML.documentElement.getElementsByTagName("CD");     for (i=0;i<x.length;i++)       {       txt=txt + "<tr>";       xx=x[i].getElementsByTagName("TITLE");         {         try           {           txt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";           }         catch (er)           {           txt=txt + "<td>&nbsp;</td>";           }         }     xx=x[i].getElementsByTagName("ARTIST");       {         try           {           txt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";           }         catch (er)           {           txt=txt + "<td>&nbsp;</td>";           }         }       txt=txt + "</tr>";       }     txt=txt + "</table>";     document.getElementById('txtCDInfo').innerHTML=txt;     }   } xmlhttp.open("GET",url,true); xmlhttp.send(); }

AJAX 服务器页面


 上面这个例子中使用的服务器页面实际上是一个名为 "cd_catalog.xml" XML 文件。

相关教程

 XML教程

 XML DOM教程


AJAX 实例


实例

AJAX 实例

 一个简单的AJAX实例

 创建一个简单的XMLHttpRequest,从一个TXT文件中返回数据。

 用AJAX加载 XML 文件

 创建一个简单的XMLHttpRequest,从一个XML文件中返回数据。

 用AJAX进行一次 HEAD 请求

 检索资源(文件)的头信息。

 用AJAX进行一次指定的 HEAD 请求

 检索资源(文件)的指定头信息。

 用AJAX从ASP 文件返回数据

 当用户在文本框内键入字符时网页如何与Web服务器进行通信

 用AJAX从数据库返回数据

 用AJAX网页如何获取数据库中的信息

 用AJAX从XML 文件返回数据

 创建一个XMLHttpRequest从XML文件中检索数据并显示在一个HTML表格中。

 用callback函数的AJAX实例

 用一个callback函数创建一个XMLHttpRequest,并从一个TXT文件中检索数据。

AJAX提交form表单方法


 AJAX提交form表单,这在日常项目中是经常用到的。前台无论是简单的html、jsp或者使用了easyui框架,只要是提交表单一般都会使用到AJAX。

AJAX提交表单分为两种

 1、无返回结果的,就是把表单数据直接提交给后台,让后台直接处理;

 最简单的就是$(“#formid”).submit();直接将form表单提交到后台。

 2、返回有结果的,这种情况下,后台不管是执行成功还是失败,最终的信息都需要返回到前台。

 第二种是使用最多的一种,因为程序的执行成功与否都需要给用户提示,程序一般也都是多步完成的,执行完插入操作,需要发起流程,这就需要在界面上判断成功与否。ajax本身属于有返回结果的一类,其中的success方法就是处理后台返回结果的。

AJAX提交表单有返回结果的有两种实现方式

 1、将form表单数据序列化

<span style="font-size:18px;">  $.ajax({      type: "POST",      url:your-url,      data:$('#yourformid').serialize(),      async: false,      error: function(request) {          alert("Connection error");      },      success: function(data) {          //接收后台返回的结果      }    });</span>  

 需要注意的是,使用这种方法的前提是form表单中的项一定要有name属性,后台获取的键值对为 key=name 值,value=各项值。

注意:无论是input标签还是span标签或者其他标签,一定要有name属性,没有name属性后台是获取不到该项的。

2、通过窗口查找form提交

<span style="font-size:18px;">  // 提交表单    var obj = document.getElementById("xx_iframe").contentWindow;    obj.$("#yourform").form("submit",{      success :function(data){          //对结果处理      }      });</span>

 因为在当前界面上弹出对话框,然后在对话框上的按钮触发对话框中表单提交,对话框又是链接的另外的html页面,如此通过$(“#formid”)的方式是找不到对话框中的form的,因此这种情况下只能使用这种方式提交表单。

 另外ajax中封装的get,post请求也都属于有返回结果的一类。

 总的来说,无返回结果的和有返回结果的(将form表单数据序列化+通过窗口实现form提交),form表单都必须要有name属性。


4种常用的AJAX请求方式


 在jQuery中,AJAX常见的请求方式主要有一下4种:

1、$.ajax()返回其创建的 XMLHttpRequest 对象

 $.ajax() 只有一个参数:参数key/value对象,包含各配置及回调函数信息。

 如果你指定了dataType选项,那么需要保证服务器返回正确的MIME信息,(如 xml 返回 "text/xml")。

 实例:

 保存数据到服务器,成功时显示信息。 

$.ajax({type: "post",dataType: "html",url: '/Resources/GetList.ashx',data: dataurl,success: function (data) {if (data != "") {$("#pager").pager({ pagenumber: pagenumber, pagecount: data.split("$")[1], buttonClickCallback: PageClick });$("#anhtml").html(data.split("$")[0]);}}});

2.通过远程 HTTP GET 请求载入信息

 相比于复杂的$.ajax而言,GET请求功能则显得更加简单,请求成功时可调用回调函数。当然如果需要在出错时执行函数,那么还请使用$.ajax

 实例:

$.get("test.cgi", { name: "John", time: "2pm" },function(data){alert("Data Loaded: " + data);});

3. 通过远程 HTTP POST 请求载入信息

 POST请求功能也相对比较简单,请求成功时可调用回调函数。如果需要在出错时执行函数,那么请使用$.ajax请求。

 实例:

$.post("/Resources/addfriend.ashx", { "fid": fids, "fname": fnames, "tuid": tuids, "tuname": tunames }, function (data) {if (data == "ok") {alert("添加成功!");}})

4.通过 HTTP GET 请求载入 JSON 数据

 实例:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",function(data){$.each(data.items, function(i,item){$("<img/>").attr("src", item.media.m).appendTo("#images");if ( i == 3 ) return false;});});

 上所述是51coolma为大家带来的4种常用的Ajax请求方式介绍,希望对大家有所帮助。


相关教程:

AJAX入门教程

jQuery教程


AJAX面试问题


 下面列出了常见的AJAX面试问题和答案。

1、什么是AJAX?

 AJAX代表异步JavaScript和XML。它是一组用于异步显示数据的相关技术。换句话说,它在不重新加载网页的情况下发送和检索数据。

2、AJAX有哪些优点?

  • 快速回复
  • 带宽利用率
  • 在从服务器检索数据之前,不会阻止用户。
  • 它允许我们只将重要数据发送到服务器。
  • 它使应用程序具有交互性和更快速。

3、AJAX有哪些缺点?

  • 取决于JavaScript
  • 安全问题
  • 调试很困难

4、原生js ajax请求有几个步骤?分别是什么

//创建 XMLHttpRequest 对象var ajax = new XMLHttpRequest();//规定请求的类型、URL 以及是否异步处理请求。ajax.open('GET',url,true);//发送信息至服务器时内容编码类型ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //发送请求ajax.send(null);  //接受服务器响应数据ajax.onreadystatechange = function () {    if (obj.readyState == 4 && (obj.status == 200 || obj.status == 304)) {     }};

5、ajax几种请求方式?他们的优缺点?

常用的post,get,delete。不常用copy、head、link等等。

区别:

(1)post比get安全 (因为post参数在请求体中。get参数在url上面)

(2)get传输速度比post快 根据传参决定的。(post通过请求体传参,后台通过数据流接收。速度稍微慢一些。而get通过url传参可以直接获取)

(3)post传输文件大理论没有限制  get传输文件小大概7-8k ie4k左右

(4)get获取数据 post上传数据(上传的数据比较多  而且上传数据都是重要数据。所以不论在安全性还是数据量级 post是最好的选择)

6、目前市场上运行的AJAX的真实Web应用程序是什么?

  • 推特
  • Facebook
  • Gmail
  • Javatpoint
  • Youtube

7、AJAX有哪些安全问题?

  • AJAX源代码是可读的
  • 攻击者可以将脚本插入系统

8、同步和异步请求有什么区别?

 同步请求会阻止用户,直到检索到响应,而异步不会阻止用户。

9、AJAX使用了哪些技术?

  • HTML / XHTML和CSS - 这些技术用于显示内容和样式。
  • DOM - 用于动态显示和与数据交互。
  • XML - 用于与服务器之间传送数据
  • XMLHttpRequest - 用于客户端和服务器之间的异步通信。
  • JavaScript - 主要用于客户端验证。

10、XMLHttpRequest的目的是什么?

  • 它将后台数据发送到服务器。
  • 它从服务器请求数据。
  • 它从服务器接收数据。
  • 它在不重新加载页面的情况下更新数据。

11、XMLHttpRequest的属性是什么?

下面给出了XMLHttpRequest对象的重要属性。

  • onReadyStateChange - 只要readystate属性发生变化,就会调用它。
  • readyState - 表示请求的状态。
  • responseText - 它将响应作为文本返回。
  • responseXML - 它以XML格式返回响应。
  • status - 返回请求的状态编号。
  • statusText - 返回状态的详细信息。

12、XMLHttpRequest的重要方法是什么?

  • abort() - 用于取消当前请求。
  • getAllResponseHeaders() - 返回标题详细信息。
  • getResponseHeader() - 返回特定的标题详细信息。
  • open() - 用于打开请求。
  • send() - 用于发送请求。
  • setRequestHeader() - 它添加了请求标头。

13、XMLHttpRequest使用的open()方法有哪些类型?

  • open(method,URL) - 它打开指定get或post方法和URL的请求。
  • open(method,URL,async) - 它与上面相同但是指定异步或不指定。
  • open(method,URL,async,userName,password) - 与上面相同,但指定用户名和密码。

14、XMLHttpRequest使用的send()方法有哪些类型?

  • send() - 它发送get请求
  • send(string) - 发送帖子请求。

15、回调函数在AJAX中的作用是什么?

 回调函数将函数作为参数传递给另一个函数。如果我们必须在网站上执行各种AJAX任务,那么我们可以创建一个用于执行XMLHttpRequest的函数和一个用于执行每个AJAX任务的回调函数。

16、AJAX中的JSON是什么?

 JSON代表JavaScript Object Notation。在AJAX中,它用于在浏览器和服务器之间交换数据。它很容易理解,数据交换比XML快。它支持数组,对象,字符串,数字和值。

request.onreadystatechange   =  function (){          if(request.readyState  == 4)          {            var  jsonObj  =  JSON .parse(request.responseText); // JSON.parse()返回JSON对象            的document.getElementById( “日期”).innerHTML  =   jsonObj .date;            的document.getElementById( “时间”).innerHTML  =  jsonObj .时间;          }       } 

17、调试AJAX应用程序的工具有哪些?

 有几种用于调试AJAX应用程序的工具。

  • 适用于Mozilla Firefox的Firebug
  • 适用于IE的Fiddler(Internet Explorer)
  • JavaScript HTML调试器
  • MyEclipse AJAX工具
  • 脚本调试器

18、AJAX中的回发类型有哪些?

 在AJAX中有两种类型的回发。

  • 同步回发 - 它会阻止客户端直到操作完成。
  • 异步回发 - 它不会阻止客户端。

19、AJAX中请求的准备状态有哪些?

 在AJAX中有5个请求的就绪状态。

  • 0:意味着未被发现
  • 1:表示已打开
  • 2:表示HEADERS_RECEIVED
  • 3:表示装载
  • 4:表示完成

20、常见的AJAX框架是什么?

  • Dojo Toolkit
  • YUI
  • Google Web Toolkit(GWT)
  • Spry
  • MooTools
  • Prototype

21、你如何测试AJAX代码?

 JUnit是客户端JavaScript的开源单元测试框架。需要创建测试用例。单元测试用例是一个代码,用于确保程序逻辑按预期工作。

22、JavaScript和AJAX有什么区别?

JavaScriptAJAX
JavaScript是一种基于对象的脚本语言。AJAX是一组相互关联的技术,如JavaScript,XML,HTML,CSS等
它请求服务器并等待响应。它向服务器发送请求,不等待响应。
重新加载页面时会占用更多带宽。它不会重新加载页面,因此占用的带宽更少。


AJAX JSON 实例


 我们可以通过AJAX代码获取JSON数据。AJAX提供了异步获取响应的工具。它不会重新加载页面并节省带宽。

 让我们看一个使用AJAX代码获取JSON数据的简单示例:

<!DOCTYPE html><html lang="en"><head><meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><script type="application/javascript">function loadJSON(){    var data_file = "https://atts.51coolma.cn/articles/user.json";    var http_request = new XMLHttpRequest();    try{        // Opera 8.0+, Firefox, Chrome, Safari        http_request = new XMLHttpRequest();    }catch (e){        // IE 浏览器处理        try{            http_request = new ActiveXObject("Msxml2.XMLHTTP");        }catch (e) {            try{                http_request = new ActiveXObject("Microsoft.XMLHTTP");            }catch (e){                // 错误处理                alert("Your browser broke!");                return false;            }        }    }    http_request.onreadystatechange = function(){        if (http_request.readyState == 4 )        {            // 使用 JSON.parse 解析 JSON 数据            var jsonObj = JSON.parse(http_request.responseText);            // jsonObj 变量现在包含数组结构,可以通过 jsonObj.name 和 jsonObj.country 的方式访问            document.getElementById("Name").innerHTML = jsonObj.name;            document.getElementById("Country").innerHTML = jsonObj.country;        }    }    http_request.open("GET", data_file, true);    http_request.send();}</script><title>tutorialspoint.com JSON</title></head><body><h1>Cricketer Details</h1><table class="src"><tr><th>Name</th><th>Country</th></tr><tr><td><div id="Name">Sachin</div></td><td><div id="Country">India</div></td></tr></table><div class="central"><button type="button" onclick="loadJSON()">Update Details </button></div></body></html>
由于CROS的存在,跨域请求处理会被浏览器屏蔽掉,所以ajax请求只能在相同域名下进行请求(比如本站的网页请求本站的Ajax),以上代码在在线运行情况下是可以运行的,但在本地情况下不能运行,望知悉。

使用AJAX存在的问题


 AJAX的使用率正在快速增长,这也是它会包含许多问题的原因。我们希望随着时间的推移,这些问题将得到解决,AJAX将成为Web应用程序的理想选择。

 在本节我们列出了AJAX目前遇到的一些问题。

(1)复杂性增加了

  • 服务器端开发人员需要了解HTML客户端页面以及服务器端逻辑中将需要表示逻辑。
  • 页面开发人员必须具备JavaScript技能。

(2)基于AJAX的应用程序可能难以调试,测试和维护

  • JavaScript很难测试 - 自动测试很难。
  • JavaScript中的模块化程度较弱。
  • 尚缺乏设计模式或最佳实践指南。

(3)工具包/框架尚未成熟

  • 他们中的大多数都处于测试阶段。

(4)尚未标准化XMLHttpRequest

  • IE的未来版本将解决这个问题。

(5)旧浏览器中不支持XMLHttpRequest

  • iframe会有所帮助。

(6)JavaScript技术依赖性和不兼容性

  • 必须启用应用程序才能运行。
  • 仍然存在一些浏览器不兼容性。

(7)JavaScript代码对黑客可见

  • 设计糟糕的JavaScript代码可能会引发安全问题。

AJAX安全性


服务器端

  • 基于AJAX的Web应用程序使用与常规Web应用程序相同的服务器端安全方案。
  • 您可以在web.xml文件或程序中指定身份验证,授权和数据保护要求。
  • 基于AJAX的Web应用程序受到与常规Web应用程序相同的安全威胁。

客户端

  • JavaScript代码对用户/黑客可见。黑客可以使用JavaScript代码来推断服务器端的弱点。
  • JavaScript代码从服务器下载并在客户端执行(“eval”),并可能通过恶意代码破坏客户端。
  • 下载的JavaScript代码受到沙盒安全模型的约束,可以放宽签名的JavaScript。


AJAX提交form表单方法


 AJAX提交form表单,这在日常项目中是经常用到的。前台无论是简单的html、jsp或者使用了easyui框架,只要是提交表单一般都会使用到AJAX。

AJAX提交表单分为两种

 1、无返回结果的,就是把表单数据直接提交给后台,让后台直接处理;

 最简单的就是$(“#formid”).submit();直接将form表单提交到后台。

 2、返回有结果的,这种情况下,后台不管是执行成功还是失败,最终的信息都需要返回到前台。

 第二种是使用最多的一种,因为程序的执行成功与否都需要给用户提示,程序一般也都是多步完成的,执行完插入操作,需要发起流程,这就需要在界面上判断成功与否。ajax本身属于有返回结果的一类,其中的success方法就是处理后台返回结果的。

AJAX提交表单有返回结果的有两种实现方式

 1、将form表单数据序列化

<span style="font-size:18px;">  $.ajax({      type: "POST",      url:your-url,      data:$('#yourformid').serialize(),      async: false,      error: function(request) {          alert("Connection error");      },      success: function(data) {          //接收后台返回的结果      }    });</span>  

 需要注意的是,使用这种方法的前提是form表单中的项一定要有name属性,后台获取的键值对为 key=name 值,value=各项值。

注意:无论是input标签还是span标签或者其他标签,一定要有name属性,没有name属性后台是获取不到该项的。

2、通过窗口查找form提交

<span style="font-size:18px;">  // 提交表单    var obj = document.getElementById("xx_iframe").contentWindow;    obj.$("#yourform").form("submit",{      success :function(data){          //对结果处理      }      });</span>

 因为在当前界面上弹出对话框,然后在对话框上的按钮触发对话框中表单提交,对话框又是链接的另外的html页面,如此通过$(“#formid”)的方式是找不到对话框中的form的,因此这种情况下只能使用这种方式提交表单。

 另外ajax中封装的get,post请求也都属于有返回结果的一类。

 总的来说,无返回结果的和有返回结果的(将form表单数据序列化+通过窗口实现form提交),form表单都必须要有name属性。


4种常用的AJAX请求方式


 在jQuery中,AJAX常见的请求方式主要有一下4种:

1、$.ajax()返回其创建的 XMLHttpRequest 对象

 $.ajax() 只有一个参数:参数key/value对象,包含各配置及回调函数信息。

 如果你指定了dataType选项,那么需要保证服务器返回正确的MIME信息,(如 xml 返回 "text/xml")。

 实例:

 保存数据到服务器,成功时显示信息。 

$.ajax({type: "post",dataType: "html",url: '/Resources/GetList.ashx',data: dataurl,success: function (data) {if (data != "") {$("#pager").pager({ pagenumber: pagenumber, pagecount: data.split("$")[1], buttonClickCallback: PageClick });$("#anhtml").html(data.split("$")[0]);}}});

2.通过远程 HTTP GET 请求载入信息

 相比于复杂的$.ajax而言,GET请求功能则显得更加简单,请求成功时可调用回调函数。当然如果需要在出错时执行函数,那么还请使用$.ajax

 实例:

$.get("test.cgi", { name: "John", time: "2pm" },function(data){alert("Data Loaded: " + data);});

3. 通过远程 HTTP POST 请求载入信息

 POST请求功能也相对比较简单,请求成功时可调用回调函数。如果需要在出错时执行函数,那么请使用$.ajax请求。

 实例:

$.post("/Resources/addfriend.ashx", { "fid": fids, "fname": fnames, "tuid": tuids, "tuname": tunames }, function (data) {if (data == "ok") {alert("添加成功!");}})

4.通过 HTTP GET 请求载入 JSON 数据

 实例:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",function(data){$.each(data.items, function(i,item){$("<img/>").attr("src", item.media.m).appendTo("#images");if ( i == 3 ) return false;});});

 上所述是51coolma为大家带来的4种常用的Ajax请求方式介绍,希望对大家有所帮助。


相关教程:

AJAX入门教程

jQuery教程


AJAX面试问题


 下面列出了常见的AJAX面试问题和答案。

1、什么是AJAX?

 AJAX代表异步JavaScript和XML。它是一组用于异步显示数据的相关技术。换句话说,它在不重新加载网页的情况下发送和检索数据。

2、AJAX有哪些优点?

  • 快速回复
  • 带宽利用率
  • 在从服务器检索数据之前,不会阻止用户。
  • 它允许我们只将重要数据发送到服务器。
  • 它使应用程序具有交互性和更快速。

3、AJAX有哪些缺点?

  • 取决于JavaScript
  • 安全问题
  • 调试很困难

4、原生js ajax请求有几个步骤?分别是什么

//创建 XMLHttpRequest 对象var ajax = new XMLHttpRequest();//规定请求的类型、URL 以及是否异步处理请求。ajax.open('GET',url,true);//发送信息至服务器时内容编码类型ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //发送请求ajax.send(null);  //接受服务器响应数据ajax.onreadystatechange = function () {    if (obj.readyState == 4 && (obj.status == 200 || obj.status == 304)) {     }};

5、ajax几种请求方式?他们的优缺点?

常用的post,get,delete。不常用copy、head、link等等。

区别:

(1)post比get安全 (因为post参数在请求体中。get参数在url上面)

(2)get传输速度比post快 根据传参决定的。(post通过请求体传参,后台通过数据流接收。速度稍微慢一些。而get通过url传参可以直接获取)

(3)post传输文件大理论没有限制  get传输文件小大概7-8k ie4k左右

(4)get获取数据 post上传数据(上传的数据比较多  而且上传数据都是重要数据。所以不论在安全性还是数据量级 post是最好的选择)

6、目前市场上运行的AJAX的真实Web应用程序是什么?

  • 推特
  • Facebook
  • Gmail
  • Javatpoint
  • Youtube

7、AJAX有哪些安全问题?

  • AJAX源代码是可读的
  • 攻击者可以将脚本插入系统

8、同步和异步请求有什么区别?

 同步请求会阻止用户,直到检索到响应,而异步不会阻止用户。

9、AJAX使用了哪些技术?

  • HTML / XHTML和CSS - 这些技术用于显示内容和样式。
  • DOM - 用于动态显示和与数据交互。
  • XML - 用于与服务器之间传送数据
  • XMLHttpRequest - 用于客户端和服务器之间的异步通信。
  • JavaScript - 主要用于客户端验证。

10、XMLHttpRequest的目的是什么?

  • 它将后台数据发送到服务器。
  • 它从服务器请求数据。
  • 它从服务器接收数据。
  • 它在不重新加载页面的情况下更新数据。

11、XMLHttpRequest的属性是什么?

下面给出了XMLHttpRequest对象的重要属性。

  • onReadyStateChange - 只要readystate属性发生变化,就会调用它。
  • readyState - 表示请求的状态。
  • responseText - 它将响应作为文本返回。
  • responseXML - 它以XML格式返回响应。
  • status - 返回请求的状态编号。
  • statusText - 返回状态的详细信息。

12、XMLHttpRequest的重要方法是什么?

  • abort() - 用于取消当前请求。
  • getAllResponseHeaders() - 返回标题详细信息。
  • getResponseHeader() - 返回特定的标题详细信息。
  • open() - 用于打开请求。
  • send() - 用于发送请求。
  • setRequestHeader() - 它添加了请求标头。

13、XMLHttpRequest使用的open()方法有哪些类型?

  • open(method,URL) - 它打开指定get或post方法和URL的请求。
  • open(method,URL,async) - 它与上面相同但是指定异步或不指定。
  • open(method,URL,async,userName,password) - 与上面相同,但指定用户名和密码。

14、XMLHttpRequest使用的send()方法有哪些类型?

  • send() - 它发送get请求
  • send(string) - 发送帖子请求。

15、回调函数在AJAX中的作用是什么?

 回调函数将函数作为参数传递给另一个函数。如果我们必须在网站上执行各种AJAX任务,那么我们可以创建一个用于执行XMLHttpRequest的函数和一个用于执行每个AJAX任务的回调函数。

16、AJAX中的JSON是什么?

 JSON代表JavaScript Object Notation。在AJAX中,它用于在浏览器和服务器之间交换数据。它很容易理解,数据交换比XML快。它支持数组,对象,字符串,数字和值。

request.onreadystatechange   =  function (){          if(request.readyState  == 4)          {            var  jsonObj  =  JSON .parse(request.responseText); // JSON.parse()返回JSON对象            的document.getElementById( “日期”).innerHTML  =   jsonObj .date;            的document.getElementById( “时间”).innerHTML  =  jsonObj .时间;          }       } 

17、调试AJAX应用程序的工具有哪些?

 有几种用于调试AJAX应用程序的工具。

  • 适用于Mozilla Firefox的Firebug
  • 适用于IE的Fiddler(Internet Explorer)
  • JavaScript HTML调试器
  • MyEclipse AJAX工具
  • 脚本调试器

18、AJAX中的回发类型有哪些?

 在AJAX中有两种类型的回发。

  • 同步回发 - 它会阻止客户端直到操作完成。
  • 异步回发 - 它不会阻止客户端。

19、AJAX中请求的准备状态有哪些?

 在AJAX中有5个请求的就绪状态。

  • 0:意味着未被发现
  • 1:表示已打开
  • 2:表示HEADERS_RECEIVED
  • 3:表示装载
  • 4:表示完成

20、常见的AJAX框架是什么?

  • Dojo Toolkit
  • YUI
  • Google Web Toolkit(GWT)
  • Spry
  • MooTools
  • Prototype

21、你如何测试AJAX代码?

 JUnit是客户端JavaScript的开源单元测试框架。需要创建测试用例。单元测试用例是一个代码,用于确保程序逻辑按预期工作。

22、JavaScript和AJAX有什么区别?

JavaScriptAJAX
JavaScript是一种基于对象的脚本语言。AJAX是一组相互关联的技术,如JavaScript,XML,HTML,CSS等
它请求服务器并等待响应。它向服务器发送请求,不等待响应。
重新加载页面时会占用更多带宽。它不会重新加载页面,因此占用的带宽更少。


AJAX JSON 实例


 我们可以通过AJAX代码获取JSON数据。AJAX提供了异步获取响应的工具。它不会重新加载页面并节省带宽。

 让我们看一个使用AJAX代码获取JSON数据的简单示例:

<!DOCTYPE html><html lang="en"><head><meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><script type="application/javascript">function loadJSON(){    var data_file = "https://atts.51coolma.cn/articles/user.json";    var http_request = new XMLHttpRequest();    try{        // Opera 8.0+, Firefox, Chrome, Safari        http_request = new XMLHttpRequest();    }catch (e){        // IE 浏览器处理        try{            http_request = new ActiveXObject("Msxml2.XMLHTTP");        }catch (e) {            try{                http_request = new ActiveXObject("Microsoft.XMLHTTP");            }catch (e){                // 错误处理                alert("Your browser broke!");                return false;            }        }    }    http_request.onreadystatechange = function(){        if (http_request.readyState == 4 )        {            // 使用 JSON.parse 解析 JSON 数据            var jsonObj = JSON.parse(http_request.responseText);            // jsonObj 变量现在包含数组结构,可以通过 jsonObj.name 和 jsonObj.country 的方式访问            document.getElementById("Name").innerHTML = jsonObj.name;            document.getElementById("Country").innerHTML = jsonObj.country;        }    }    http_request.open("GET", data_file, true);    http_request.send();}</script><title>tutorialspoint.com JSON</title></head><body><h1>Cricketer Details</h1><table class="src"><tr><th>Name</th><th>Country</th></tr><tr><td><div id="Name">Sachin</div></td><td><div id="Country">India</div></td></tr></table><div class="central"><button type="button" onclick="loadJSON()">Update Details </button></div></body></html>
由于CROS的存在,跨域请求处理会被浏览器屏蔽掉,所以ajax请求只能在相同域名下进行请求(比如本站的网页请求本站的Ajax),以上代码在在线运行情况下是可以运行的,但在本地情况下不能运行,望知悉。

使用AJAX存在的问题


 AJAX的使用率正在快速增长,这也是它会包含许多问题的原因。我们希望随着时间的推移,这些问题将得到解决,AJAX将成为Web应用程序的理想选择。

 在本节我们列出了AJAX目前遇到的一些问题。

(1)复杂性增加了

  • 服务器端开发人员需要了解HTML客户端页面以及服务器端逻辑中将需要表示逻辑。
  • 页面开发人员必须具备JavaScript技能。

(2)基于AJAX的应用程序可能难以调试,测试和维护

  • JavaScript很难测试 - 自动测试很难。
  • JavaScript中的模块化程度较弱。
  • 尚缺乏设计模式或最佳实践指南。

(3)工具包/框架尚未成熟

  • 他们中的大多数都处于测试阶段。

(4)尚未标准化XMLHttpRequest

  • IE的未来版本将解决这个问题。

(5)旧浏览器中不支持XMLHttpRequest

  • iframe会有所帮助。

(6)JavaScript技术依赖性和不兼容性

  • 必须启用应用程序才能运行。
  • 仍然存在一些浏览器不兼容性。

(7)JavaScript代码对黑客可见

  • 设计糟糕的JavaScript代码可能会引发安全问题。

AJAX安全性


服务器端

  • 基于AJAX的Web应用程序使用与常规Web应用程序相同的服务器端安全方案。
  • 您可以在web.xml文件或程序中指定身份验证,授权和数据保护要求。
  • 基于AJAX的Web应用程序受到与常规Web应用程序相同的安全威胁。

客户端

  • JavaScript代码对用户/黑客可见。黑客可以使用JavaScript代码来推断服务器端的弱点。
  • JavaScript代码从服务器下载并在客户端执行(“eval”),并可能通过恶意代码破坏客户端。
  • 下载的JavaScript代码受到沙盒安全模型的约束,可以放宽签名的JavaScript。