>  기사  >  웹 프론트엔드  >  Ajax 사용법 간단한 튜토리얼

Ajax 사용법 간단한 튜토리얼

巴扎黑
巴扎黑원래의
2017-08-09 14:12:291087검색

비동기 상호작용과 동기 상호작용

  • Ajax에 관해서라면 비동기 전송과 동기 전송에 대해 이야기해야 합니다.

    • 비동기식은 통신 방법입니다. 송신자가 데이터를 보낸 후 수신자가 응답을 다시 보낼 때까지 기다리지 않고 다음 데이터 패킷을 보냅니다.

    • 동기화란 송신자가 데이터를 보내고 수신자가 응답을 다시 보낼 때까지 기다린 후 다음 데이터 패킷을 보내는 통신 방식을 말합니다.

  • 은 다음과 같이 이해될 수도 있습니다.

    • 비동기 전송: 그냥 전달하세요. 제가 할 일을 하러 가겠습니다. 전송이 완료되면 알려주세요.

    • 동기 전송: 지금 전송 중입니다. 다른 작업을 하기 전에 전송을 완료하는 모습을 지켜보고 싶습니다.

Ajax란 무엇인가요?

  • Ajax는 (Asynchronous JavaScript and Xml)의 약어로 간주됩니다.

  • 이제 현재 페이지를 새로 고치지 않고도 브라우저가 서버와 통신할 수 있게 해주는 기술을 Ajax라고 합니다.

Ajax 작동 방식.

  • Ajax의 핵심은 JavaScript 객체 XmlHttpRequest입니다. 이 개체는 Internet Explorer 5에서 처음 도입되었습니다. 비동기 요청을 지원하는 기술입니다. 간단히 말해서 XmlHttpRequest를 사용하면 JavaScript를 사용하여 서버에 요청하고 사용자를 차단하지 않고 응답을 처리할 수 있습니다.

  • Ajax는 비동기식 상호 작용 프로세스를 사용합니다. Ajax는 사용자와 서버 사이에 중개자를 도입하여 네트워크 상호 연결 과정에서 처리-대기-처리-대기 단점을 제거합니다.

  • 사용자의 브라우저는 작업을 수행할 때 Ajax 엔진을 로드합니다. Ajax 엔진은 JavaScript 언어로 작성되었으며 일반적으로 숨겨진 프레임워크에 숨겨져 있습니다. 사용자 인터페이스와 서버 간의 상호 작용을 컴파일하는 역할을 담당합니다.

  • Ajax 엔진을 사용하면 사용자와 응용 프로그램 소프트웨어 간의 상호 작용 프로세스가 사용자와 네트워크 서버 간의 통신과 관계없이 비동기적으로 진행될 수 있습니다. 이제 HTTP 사용자 작업을 생성하는 대신 JavaScript를 사용하여 Ajax 엔진을 호출할 수 있으며, 전체 페이지를 다시 로드하지 않고도 Ajax를 통해 메모리 내 데이터 편집, 페이지 탐색 및 데이터 확인을 수행할 수 있습니다.

  • Ajax를 사용하면 Jsp, 개발자 및 최종 사용자에게 눈에 띄는 편리함을 제공할 수 있습니다.

Ajax에 포함된 기술:

  • Ajax는 실제로 JavaScript, XHtml 및 CSS, Dom, Xml 및 XmlHttpRequest 기술을 포함한 여러 기술의 조합입니다. .

    • 서버 측 언어: 서버는 특정 정보를 브라우저에 보내는 기능이 필요합니다. Ajax는 서버측 언어와 아무 관련이 없습니다.

    • Xml(Extensible Markup Language)은 데이터를 기술하는 형식입니다. AJAX 프로그램은 서버와 클라이언트 간에 정보를 전달하기 위해 몇 가지 형식이 필요하며 XML은 옵션 중 하나입니다.

    • XHTML(eXtended Hypertext Markup Language, 확장 하이퍼미디어 마크업 언어 사용) 및 CSS(Cascading Style Sheet, 캐스케이딩 스타일 시트) 표준화된 렌더링.

    • DOM(Document Object Model, 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 요청의 모든 응답 헤더를 키/값 쌍으로 반환합니다.

  • getResponseHeader("headerLabel"): 지정된 헤더의 문자열 값을 반환합니다.

  • open("method","url"): 서버에 대한 호출을 생성합니다. 메서드 매개변수는 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으로 문의하세요.