Ajax에 관해서라면 비동기 전송과 동기 전송에 대해 이야기해야 합니다.
비동기식은 통신 방법입니다. 송신자가 데이터를 보낸 후 수신자가 응답을 다시 보낼 때까지 기다리지 않고 다음 데이터 패킷을 보냅니다.
동기화란 송신자가 데이터를 보내고 수신자가 응답을 다시 보낼 때까지 기다린 후 다음 데이터 패킷을 보내는 통신 방식을 말합니다.
은 다음과 같이 이해될 수도 있습니다.
비동기 전송: 그냥 전달하세요. 제가 할 일을 하러 가겠습니다. 전송이 완료되면 알려주세요.
동기 전송: 지금 전송 중입니다. 다른 작업을 하기 전에 전송을 완료하는 모습을 지켜보고 싶습니다.
Ajax는 (Asynchronous JavaScript and Xml)의 약어로 간주됩니다.
이제 현재 페이지를 새로 고치지 않고도 브라우저가 서버와 통신할 수 있게 해주는 기술을 Ajax라고 합니다.
Ajax의 핵심은 JavaScript 객체 XmlHttpRequest입니다. 이 개체는 Internet Explorer 5에서 처음 도입되었습니다. 비동기 요청을 지원하는 기술입니다. 간단히 말해서 XmlHttpRequest를 사용하면 JavaScript를 사용하여 서버에 요청하고 사용자를 차단하지 않고 응답을 처리할 수 있습니다.
Ajax는 비동기식 상호 작용 프로세스를 사용합니다. Ajax는 사용자와 서버 사이에 중개자를 도입하여 네트워크 상호 연결 과정에서 처리-대기-처리-대기 단점을 제거합니다.
사용자의 브라우저는 작업을 수행할 때 Ajax 엔진을 로드합니다. Ajax 엔진은 JavaScript 언어로 작성되었으며 일반적으로 숨겨진 프레임워크에 숨겨져 있습니다. 사용자 인터페이스와 서버 간의 상호 작용을 컴파일하는 역할을 담당합니다.
Ajax 엔진을 사용하면 사용자와 응용 프로그램 소프트웨어 간의 상호 작용 프로세스가 사용자와 네트워크 서버 간의 통신과 관계없이 비동기적으로 진행될 수 있습니다. 이제 HTTP 사용자 작업을 생성하는 대신 JavaScript를 사용하여 Ajax 엔진을 호출할 수 있으며, 전체 페이지를 다시 로드하지 않고도 Ajax를 통해 메모리 내 데이터 편집, 페이지 탐색 및 데이터 확인을 수행할 수 있습니다.
Ajax를 사용하면 Jsp, 개발자 및 최종 사용자에게 눈에 띄는 편리함을 제공할 수 있습니다.
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는 Javascript 및 AJAX 엔진을 광범위하게 사용하며 이는 브라우저 지원에 따라 다릅니다. IE5.0 이상, Mozilla1.0, NetScape7 이상에서만 지원됩니다. Mozilla는 AJAX도 지원하지만 XMLHttpRequest를 다른 방식으로 제공합니다. 따라서 AJAX를 사용하는 프로그램은 각 브라우저와의 호환성을 테스트해야 합니다.
AJAX는 페이지 콘텐츠를 업데이트할 때 전체 페이지를 새로 고치지 않습니다. 따라서 웹 페이지의 뒤로 기능이 유효하지 않습니다. 일부 사용자는 현재 데이터가 오래되었는지 또는 업데이트되었는지 혼동하는 경우가 많습니다. 이를 위해서는 명확한 위치에서 "데이터가 업데이트되었습니다"라는 사실을 사용자에게 상기시켜야 합니다.
스트리밍 미디어에 대한 지원은 FLASH 및 Java Applet만큼 좋지 않습니다.
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; }
abort(): 현재 요청을 중지합니다.
getAllResponseHeader(): HTTP 요청의 모든 응답 헤더를 키/값 쌍으로 반환합니다.
getResponseHeader("headerLabel"): 지정된 헤더의 문자열 값을 반환합니다.
open("method","url"): 서버에 대한 호출을 생성합니다. 메서드 매개변수는 GET 또는 POST일 수 있습니다. url 매개변수는 상대 URL 또는 절대 URL일 수 있습니다. 이 방법에는 3개의 선택적 매개변수도 포함되어 있습니다.
send(content): 서버에 요청을 보냅니다.
setRequestHeader("label","value"): 지정된 헤더를 제공된 값으로 설정합니다. 헤더를 설정하기 전에 open() 메서드를 호출해야 합니다.
onreadystatechange:状态改变的事件触发器。
readyState:对象状态:
0=未初始化
1=读取中
2=已读取
3=交互中
4=完成
responseText:服务器进程返回数据的文本版本。
responseXML:服务器进程返回数据的 兼容DOM的Xml文档对象。
status:服务器返回的状态码,如404=“文件未找到”,200=“成功”。
statusText:服务器返回的状态文本信息。
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实质上也是遵循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 중국어 웹사이트의 기타 관련 기사를 참조하세요!