搜索
首页web前端js教程Ajax用法简单教程

Ajax用法简单教程

Aug 09, 2017 pm 02:12 PM
ajax教程用法

异步交互和同步交互

  • 要说Ajax就不得不说,异步传输和同步传输了。

    • 异步是值:发送方发出数据后,不等接收方发回响应,接着发送下一个数据包的通讯方式。

    • 同步是指:发送方发出数据后,等待接收方发回响应以后才发下一个数据包的通讯方式。

  • 也可以理解为:

    • 异步传输:你传吧,我去做我的事了,传输完了告诉我一声。

    • 同步传输:你现在传输,我要看着你传输完成,才去做别的事。

什么是Ajax?

  • Ajax被认为是(Asynchronous JavaScript and Xml)的缩写。

  • 现在,允许浏览器与服务器通信而无须刷新当前页面的技术成为Ajax。

Ajax的工作原理。

  • Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer5首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。

  • Ajax采用异步交互过程。Ajax在用户与服务器之间引入一个中间媒介,从而取消了网络互联过程中的处理-等待-处理-等待缺点。

  • 用户的浏览器在执行任务时即加载了Ajax引擎。Ajax引擎使用JavaScript语言编写,通常藏在一个隐藏的框架中。它负责编译用户界面与服务器之间的交互。

  • Ajax引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网路服务器间的交流。现在,可以用JavaScript调用Ajax引擎来代替产生一个HTTP的用户动作,内存中的数据编辑,页面导航,数据校验这些不需要重新载入整个页面的需求可以交给Ajax来执行。

  • 使用Ajax,可以为Jsp,开发人员,终端用户带来可见的便捷。

Ajax包含的技术:

  • Ajax并不是一项新技术,其实是多种技术的综合,包含JavaScript,XHtml和CSS,Dom,Xml和XmlHttpRequest技术。

    • 服务器端语言:服务器需要具备向浏览器发送特定信息的能力。Ajax与服务器端语言无关。

    • Xml(可扩展标记语言)是一种描述数据的格式。AJAX 程序需要某种格式化的格式来在服务器和客户端之间传递信息,XML 是其中的一种选择。

    • XHTML(eXtended Hypertext Markup Language,使用扩展超媒体标记语言)和 CSS(Cascading Style Sheet,级联样式单)标准化呈现。

    • DOM(Document Object Model,文档对象模型)实现动态显示和交互。

    • 使用XMLHTTP组件XMLHttpRequest对象进行异步数据读取。

    • 使用JavaScript绑定和处理所有数据。

Ajax的缺陷:

  • Ajax并不是完美的技术,也存在缺陷:

    • AJAX大量使用了Javascript和AJAX引擎,而这个取决于浏览器的支持。IE5.0及以上、Mozilla1.0、NetScape7及以上版本才支持,Mozilla虽然也支持AJAX,但是提供XMLHttpRequest的方式不一样。所以,使用AJAX的程序必须测试针对各个浏览器的兼容性。 

    • AJAX更新页面内容的时候并没有刷新整个页面,因此,网页的后退功能是失效的;有的用户还经常搞不清楚现在的数据是旧的还是已经更新过的。这个就需要在明显位置提醒用户“数据已更新”。 

    • 对流媒体的支持没有FLASH、Java Applet好。

Ajax的核心XMLHttpRequest对象:

  • XMLHttpRequest是XMLHTTP组件的对象,通过这个对象,AJAX可以像桌面应用程序一样只同服务器进行数据层面的交换,而不用每次都刷新界面,也不用每次将数据处理的工作都交给服务器来做;这样既减轻了服务器负担又加快了响应速度、缩短了用户等待的时间。 

  • XMLHttpRequest最早是在IE5中以ActiveX组件的形式实现的。非W3C标准。

  • 创建XMLHttpRequest对象(由于非标准所以实现方法不统一):

    • Internet Explorer把XMLHttpRequest实现为一个ActiveX对象。

    • 其他浏览器(Firefox、Safari、Opera…)把它实现为一个本地的JavaScript对象。

    • XMLHttpRequest在不同浏览器上的实现是兼容的,所以可以用同样的方式访问XMLHttpRequest实例的属性和方法,而不论这个实例创建的方法是什么。

  • 初始化代码如下:

    function   createXmlHttpRequest(){
       var xmlHttp;
       try{    //Firefox, Opera 8.0+, Safari
               xmlHttp=new XMLHttpRequest();
        }catch (e){
               try{    //Internet Explorer
                      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
                }catch (e){
                      try{
                              xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                      }catch (e){}  
               }
        }
       return xmlHttp;
     }

XMLHttpRequest对象方法:

  • abort():停止当前请求。

  • getAllResponseHeader():把HTTP请求的所有响应首部作为key/value对返回。

  • getResponseHeader("headerLabel"):返回指定首部的串值。

  • open("method","url"):建立对服务器的调用,method参数可以是GET,POST。url参数可以是相对url或绝对url。这个方法还包含3个可选参数。

  • send(content):向服务器发送请求。

  • setRequestHeader("label","value"):把指定首部设置为所提供的值。在设置任何首部之前必须先调用open()方法。

XMLHttpRequest对象属性:

  • onreadystatechange:状态改变的事件触发器。

  • readyState:对象状态:

    • 0=未初始化

    • 1=读取中

    • 2=已读取

    • 3=交互中

    • 4=完成

  • responseText:服务器进程返回数据的文本版本。

  • responseXML:服务器进程返回数据的 兼容DOM的Xml文档对象。

  • status:服务器返回的状态码,如404=“文件未找到”,200=“成功”。

  • statusText:服务器返回的状态文本信息。

发送请求的属性和方法(重要),使用以下3个关键部分:

  • openreadystatechange事件处理函数。

    • 该事件处理函数由服务器触发,而不是用户。

    • 在Ajax执行过程中,服务器会通知客户端当前的通信状态。这依靠更新 XMLHttpRequest 对象的 readyState 来实现。改变 readyState 属性是服务器对客户端连接操作的一种方式。

    • 每次 readyState 属性的改变都会触发 readystatechange事件,这个是核心。

  • open(method, url, asynch)方法。

    • XMLHttpRequest 对象的 open 方法允许程序员用一个Ajax调用向服务器发送请求。

    • method:请求类型,类似 “GET”或”POST”的字符串。若只想从服务器检索一个文件,而不需要发送任何数据,使用GET(可以在GET请求里通过附加在URL上的查询字符串来发送数据,不过数据大小限制为2000个字符)。若需要向服务器发送数据,用POST。

    • 在某些情况下,有些浏览器会把多个XMLHttpRequest请求的结果缓存在同一个URL。如果对每个请求的响应不同,这就会带来不好的结果。把当前时间戳追加到URL的最后,就能确保URL的惟一性,从而避免浏览器缓存结果。

      var url = "GetAndPostExample?timeStamp=" + new Date().getTime();
    • url:路径字符串,指向你所请求的服务器上的那个文件。可以是绝对路径或相对路径。

    • asynch:表示请求是否要异步传输,默认值为true(异步)。指定true,在读取后面的脚本之前,不需要等待服务器的相应。指定false,当脚本处理过程经过这点时,会停下来,一直等到Ajax请求执行完毕再继续执行。

  • send(data)方法。

    • open 方法定义了 Ajax 请求的一些细节。send 方法可为已经待命的请求发送指令。

    • data:将要传递给服务器的字符串。

    • 若选用的是 GET 请求,则不会发送任何数据, 给 send 方法传递 null 即可:request.send(null);

    • 当向send()方法提供参数时,要确保open()中指定的方法是POST,如果没有数据作为请求体的一部分发送,则使用null.

    • 完整的 Ajax 的 GET 请求示例:

      //创建Ajax引擎
      var xmlHttpReq = createXmlHttpRequest();  
                      xmlHttpReq.onreadystatechange=function(){  
                          if(xmlHttpReq.readyState==4){  
                              if(xmlHttpReq.status==200){  
                                  document.getElementById("info").innerHTML=xmlHttpReq.responseText;  
                              }  
                          }  
                      }  
      
      xmlHttpReq.open("post","/webLogic/test_test.do",true);
  • setRequestHeader(header,value):

    • 当浏览器向服务器请求页面时,它会伴随这个请求发送一组首部信息。这些首部信息是一系列描述请求的元数据(metadata)。首部信息用来声明一个请求是 GET 还是 POST。

    • Ajax 请求中,发送首部信息的工作可以由 setRequestHeader完成。

    • 参数header: 首部的名字;  参数value:首部的值。

    • 如果用 POST 请求向服务器发送数据,需要将 “Content-type” 的首部设置为 “application/x-www-form-urlencoded”.它会告知服务器正在发送数据,并且数据已经符合URL编码了。

    • 该方法必须在open()之后才能调用.

    • 完整的 Ajax 的 POST 请求示例:

      var xmlHttpReq = createXmlHttpRequest();
      				xmlHttpReq.onreadystatechange=function(){
      					if(xmlHttpReq.readyState==4){
      						if(xmlHttpReq.status==200){
      							document.getElementById("info").innerHTML=xmlHttpReq.responseText;
      						}
      					}
      				}
      				
      				xmlHttpReq.open("post","/webLogic/test_test.do",true);
      				xmlHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
      				xmlHttpReq.send("username="+"德玛"+"&pwd="+"123");

接受--方法和属性介绍:

  • 用 XMLHttpRequest 的方法可向服务器发送请求。在 Ajax 处理过程中,XMLHttpRequest 的如下属性可被服务器更改:

    • 如果服务器返回的是 XML, 那么数据将储存在 responseXML 属性中。

    • 只用服务器发送了带有正确首部信息的数据时, responseXML 属性才是可用的。 MIME 类型必须为 text/xml。

    • XMLHttpRequest 的 responseText 属性包含了从服务器发送的数据。它是一个HTML,XML或普通文本,这取决于服务器发送的内容。

    • 当 readyState 属性值变成 4 时, responseText 属性才可用,表明 Ajax 请求已经结束。

      if(xmlHttpReq.readyState==4){
      						if(xmlHttpReq.status==200){
      							document.getElementById("info").innerHTML=xmlHttpReq.responseText;
      						}
      					}
    • 服务器发送的每一个响应也都带有首部信息。三位数的状态码是服务器发送的响应中最重要的首部信息,并且属于超文本传输协议中的一部分。

    • 常用状态码及其含义:

    • 在 XMLHttpRequest 对象中,服务器发送的状态码都保存在 status 属性里。通过把这个值和 200 或 304 比较,可以确保服务器是否已发送了一个成功的响应

    • 404 没找到页面(not found)

    • 403 禁止访问(forbidden)

    • 500 内部服务器出错(internal service error)

    • 200 一切正常(ok)

    • 304 没有被修改(not modified)(服务器返回304状态,表示源文件没有被修改 )

    • readyState 属性表示Ajax请求的当前状态。它的值用数字代表。

    • 每次 readyState 值的改变,都会触发 readystatechange 事件。如果把 onreadystatechange 事件处理函数赋给一个函数,那么每次 readyState 值的改变都会引发该函数的执行。

    • readyState 值的变化会因浏览器的不同而有所差异。但是,当请求结束的时候,每个浏览器都会把 readyState 的值统一设为 4

    • 0 代表未初始化。 还没有调用 open 方法

    • 1 代表正在加载。 open 方法已被调用,但 send 方法还没有被调用

    • 2 代表已加载完毕。send 已被调用。请求已经开始

    • 3 代表交互中。服务器正在发送响应

    • 4 代表完成。响应发送完毕

    • readyState

    • status

    • responseText

    • responseXML

Ajax的具体使用:

  • AJAX实质上也是遵循Request/Server模式,所以这个框架基本的流程是:

    • responseText:将传回的信息当字符串使用;

    • responseXML:将传回的信息当XML文档使用,可以用DOM处理。 

      function processResponse(){
         if(XMLHttpReq.readyState==4){ //判断对象状态 4代表完成
                 if(XMLHttpReq.status==200){ //信息已经成功返回,开始处理信息
                        document.getElementById("chatArea").value=XMLHttpReq.responseText;
                }
         }
            }
    • 响应需要做什么:

    • 处理响应处理函数都应该做什么。 
        首先,它要检查XMLHttpRequest对象的readyState值,判断请求目前的状态。参照前文的属性表可以知道,readyState值为4的时候,代表服务器已经传回所有的信息,可以开始处理信息并更新页面内容了。如下:
      if (http_request.readyState == 4) {
          // 信息已经返回,可以开始处理
      } else {
          // 信息还没有返回,等待
      }
        服务器返回信息后,还需要判断返回的HTTP状态码,确定返回的页面没有错误。所有的状态码都可以在W3C的官方网站上查到。其中,200代表页面正常。
      if (http_request.status == 200) {
            // 页面正常,可以开始处理信息
      } else {
          // 页面有问题
      }

    • 向服务器发出HTTP请求了。这一步调用XMLHttpRequest对象的open和send方法。     http_request.open('GET', 'http://www.example.org/some.file', true);
           http_request.send(null)

    • 按照顺序,open调用完毕之后要调用send方法。send的参数如果是以Post方式发出的话,可以是任何想传给服务器的内容。

    • 注意:如果要传文件或者Post内容给服务器,必须先调用setRequestHeader方法,修改MIME类别。如下:

    • http_request.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);
          这时资料则以查询字符串的形式列出,作为send的参数,例如:
          name=value&anothername=othervalue&so=on

      //发送请求
      function sendRequest(){
      //获取文本框的值
      var chatMsg=input.value;
      var url="chatServlet.do?charMsg="+chatMsg;
      //建立对服务器的调用
      XMLHttpReq.open("POST",url,true);
      //设置MiME类别,如果用 POST 请求向服务器发送数据,
      //需要将"Content-type" 的首部设置为 "application/x-www-form-urlencoded".
      //它会告知服务器正在发送数据,并且数据已经符合URL编码了。
      XMLHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      //状态改变的事件触发器,客户端的状态改变会触发readystatechange事件,
      //onreadystatechange会调用相应的事件处理函数
      XMLHttpReq.onreadystatechange=processResponse;
      //发送数据
      XMLHttpReq.send(null);
      }
    • 对象初始化

      function   createXmlHttpRequest(){
         var xmlHttp;
         try{    //Firefox, Opera 8.0+, Safari
                 xmlHttp=new XMLHttpRequest();
          }catch (e){
                 try{    //Internet Explorer
                        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
                  }catch (e){
                        try{
                                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                        }catch (e){}  
                 }
          }
         return xmlHttp;
       }
    • 发送请求

    • 服务器接收

    • 服务器响应

    • 客户端接收,返回两种格式:

    • 修改客户端页面内容。

  • 只不过这个过程是异步的。

  • 完整的如下:

    var xmlHttpReq = createXmlHttpRequest();
    				xmlHttpReq.onreadystatechange=function(){
    					//为4表示请求和响应结束
    					if(xmlHttpReq.readyState==4){
    						//200表示响应成功
    						if(xmlHttpReq.status==200){
    							//在div上添加action返回的值
    							document.getElementById("info").innerHTML=xmlHttpReq.responseText;
    						}
    					}
    				}
    				//这是get方式发送数据,中文记得在接受时进行编码
    				xmlHttpReq.open("post","/webLogic/test_test.do?username=aaa",true);
    				//post请求时一定要加这个请求头
    //				xmlHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    //				xmlHttpReq.send("username="+"德玛"+"&pwd="+"123");//这是post请求的发送数据方法
    				//get方式send(null),写了也没用
    				xmlHttpReq.send(null);

以上是Ajax用法简单教程的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python vs. JavaScript:开发环境和工具Python vs. JavaScript:开发环境和工具Apr 26, 2025 am 12:09 AM

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。

JavaScript是用C编写的吗?检查证据JavaScript是用C编写的吗?检查证据Apr 25, 2025 am 12:15 AM

是的,JavaScript的引擎核心是用C语言编写的。1)C语言提供了高效性能和底层控制,适合JavaScript引擎的开发。2)以V8引擎为例,其核心用C 编写,结合了C的效率和面向对象特性。3)JavaScript引擎的工作原理包括解析、编译和执行,C语言在这些过程中发挥关键作用。

JavaScript的角色:使网络交互和动态JavaScript的角色:使网络交互和动态Apr 24, 2025 am 12:12 AM

JavaScript是现代网站的核心,因为它增强了网页的交互性和动态性。1)它允许在不刷新页面的情况下改变内容,2)通过DOMAPI操作网页,3)支持复杂的交互效果如动画和拖放,4)优化性能和最佳实践提高用户体验。

C和JavaScript:连接解释C和JavaScript:连接解释Apr 23, 2025 am 12:07 AM

C 和JavaScript通过WebAssembly实现互操作性。1)C 代码编译成WebAssembly模块,引入到JavaScript环境中,增强计算能力。2)在游戏开发中,C 处理物理引擎和图形渲染,JavaScript负责游戏逻辑和用户界面。

从网站到应用程序:JavaScript的不同应用从网站到应用程序:JavaScript的不同应用Apr 22, 2025 am 12:02 AM

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python vs. JavaScript:比较用例和应用程序Python vs. JavaScript:比较用例和应用程序Apr 21, 2025 am 12:01 AM

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

C/C在JavaScript口译员和编译器中的作用C/C在JavaScript口译员和编译器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

JavaScript在行动中:现实世界中的示例和项目JavaScript在行动中:现实世界中的示例和项目Apr 19, 2025 am 12:13 AM

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具