이 글은 js 호출 json 메소드 요약에 대한 자세한 분석을 제공합니다. 도움이 필요한 친구들은 이를 참고할 수 있습니다.
Ajax 기본
ajax: 데이터 새로 고침 없음, 서버의 정보 읽기
HTTP 요청 방법:
GET: 게시물 탐색 등 데이터를 얻기 위해 사용
ajax.judgeXmlHttpRequest('get', 'index.php', function(data){ alert(data); //这是服务器返回的数据 })
POST: 데이터 업로드에 사용 , 예를 들어 사용자 등록
var dataJson = { name: 'ys',age: 123 } ajax.judgeXmlHttpRequest('post', 'index.php', function(data){ alert(data); //这是服务器返回的数据 },dataJson)
GET과 POST의 차이점:
GET: URL을 통해 전달(URL에 입력), 전달된 데이터는 URL에 배치됩니다. 이름 = 값 & 이름 = 값
get 메소드의 용량이 작고 보안이 낮으며 캐시가 없습니다
POST: URL을 통과하지 않습니다
포스트 용량이 크고 일반적으로 최대 2G이며 보안이 비교적 높으며 캐시가 없습니다
Native Ajax 쓰기
Ajax 작업 단계
Ajax 개체 만들기
Non-IE6 브라우저:
var oAjax=new XMLHttpRequest();
IE6 브라우저:
var oAjax=new ActiveXObject("Microsoft.XMLHTTP");
서버에 연결
Ajax.open(方法,文件名,异步传输);
캐싱 차단 방법:
Ajax.open('GET','a.txt?t='+new Date().getTime(),true);
Sync 동시화: js 가운데 손가락은 하나씩 와야 합니다
비동기: js는 함께 수행해야 하는 여러 작업을 나타냅니다.
ajax는 동기가 아닌 비동기 전송을 위한 것입니다.
요청 보내기
Ajax.send();
반환 값 받기
요청 상태 모니터링: onreadystatechange 이벤트: 서버 간 통신이 있을 때 Ajax가 트리거될 때 주로 ReadyState 속성으로 판단됩니다. 상태 속성
readyState 속성으로 판단됩니다. 0(초기화되지 않음) 및 open 메소드가 아직 호출되지 않음
1(로딩) send() 메소드가 호출되었으며 요청이 전송되는 중
2(로딩 완료) send() 메소드가 완료되었으며 모든 해당 내용이 수신되었습니다
3(파싱) 수신된 응답 내용이 파싱 중입니다
4(완료) 응답 내용 파싱이 완료되었으며 클라이언트에서 호출할 수 있습니다. (완료가 반드시 성공한 것은 아니며 감지하려면 상태가 필요합니다.) 성공 또는 실패)
상태 속성:
요청 결과, 성공(200) 또는 실패(404) 여부:Ajax.status==200
반환 값 responseText:
서버에서 반환된 텍스트: Ajax.responseText (반환된 값은 문자열이며 때로는 다른 형식으로 추가 처리해야 합니다)
oAjax.onreadystatechange=function(){ //oAjax.readyState: 表示浏览器和服务器之间进行到哪一步了 if(oAjax.readyState==4){ //读取完成 if(oAjax.status==200){ //读取的结果是成功 alert('成功:'+oAjax.responseText); } } }
네이티브 Ajax를 사용하기 위해 함수로 캡슐화하고 최종 작성된 네이티브 Ajax는 다음과 같습니다.
GET 메서드로 캡슐화된 함수는 다음과 같습니다. :function ajax(url,fnSuccess,fnFaild){
//1.创建Ajax对象。js中,使用一个没有定义的变量会报错,使用一个没有定义的属性,是undefined。IE6下使用没有定义的XMLHttpRequest会报错,所以当做window的一个属性使用
if (window.XMLHttpRequest) {
var oAjax=new XMLHttpRequest();//非IE6
}else{
var oAjax=new ActiveXObject("Microsoft.XMLHTTP");//IE6
}
//2.连接到服务器
oAjax.open('GET',url,true);
//3.发送请求
oAjax.send();
//4.接收返回值
oAjax.onreadystatechange=function(){
//oAjax.readyState--浏览器和服务器之间进行到哪一步了
if(oAjax.readyState==4){ //读取完成
if(oAjax.status==200){ //读取的结果是成功
fnSuccess(oAjax.responseText); //成功时执行的函数
}else{
if(fnFaild){ //判断是否传入失败是的函数,即用户是否关心失败时的结果
fnFaild(oAjax.responseText); //对失败的原因做出处理
}
}
}
}
}
function ajaxPost(url,id,fnSuccess,fnFaild){
//1.创建Ajax对象
if (window.XMLHttpRequest) {
var xhr=new XMLHttpRequest();//非IE6
}else{
var xhr=new ActiveXObject("Microsoft.XMLHTTP");//IE6
}
//2.连接到服务器
xhr.open("POST",url,true);
//设置头信息
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
var form=document.getElementById(id);
//3.发送请求,传递数据
xhr.send(serialize(form));
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if ((xhr.status>=200 && xhr.status<300) || xhr.status==304) {
fnSuccess(xhr.responseText);
}else{
fnFaild(xhr.responseText);
}
}
};
}
캐시인 경우 동일해야 하며 캐싱을 방지합니다( 자주 변경되는 데이터 등은 캐시할 수 없습니다. 매개변수를 전달할 때 경로 뒤에 ?+'변수 데이터'를 추가하면 원본 데이터에는 영향을 미치지 않습니다.
ajax('a.txt?t='+new Date().getTime(),function(str){ alert(str); },function(str){ alert(str); });
1 ajax 반환 값은 문자열이며, 반환된 배열/json 데이터는 평가 변환을 통해 읽을 수 있습니다.
alert(str); alert(typeof(str)); var arr=eval(str); alert(typeof(arr)); alert(arr[1]); alert(arr[1].c);
2 DOM과 결합하여 표시용 요소를 생성합니다. 반환된 콘텐츠
oBtn.onclick=function(){ ajax('data/arr3.txt?t='+new Date().getTime(),function(str){ var arr=eval(str); for (var i = 0; i < arr.length; i++) { var oLi=document.createElement('li'); oLi.innerHTML='用户名:<span>'+arr[i].user+'</span>密码:<span>'+arr[i].pass+'</span>'; oUl.appendChild(oLi); } },function(str){ alert(str); }); }
데이터 유형--> 반환된 데이터 유형은 xml(거의 제거됨), json(현재 일반적으로 사용됨)일 수 있습니다.
제가 최근에 get 메소드를 통해 json을 호출하기 위해 네이티브 js를 작성한 예를 살펴보겠습니다.
if(!isNaN(matchId)) { var xmlHttp = null; try {// Chrome, Firefox, Opera, Safari xmlHttp = new XMLHttpRequest(); }catch (e) { try {// Internet Explorer IE 6.0+ xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try {// Internet Explorer IE 5.5+ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("your browser not support ajax!"); } } } window.onload = function () { xmlHttp.open("get",/api/clientMatch/commonMatchDiagram.json?matchId=" + matchId,true); xmlHttp.send(); xmlHttp.onreadystatechange = doResult; //设置回调函数 }; function doResult() { var html=''; if ((xmlHttp.readyState == 4)&&(xmlHttp.status == 200)) {//4代表执行完成,200代表执行成功 var data = JSON.parse(xmlHttp.responseText); if(data.code == 200){ //代码执行 } document.getElementById('appMatch').innerHTML = html; } } }
위는 제가 작성한 것입니다. 모든 사람을 위해 편집되었습니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다.
관련 기사:
Angular를 사용하여 변경 감지를 구현하는 방법ES6의 맵, 세트, 배열 및 객체 비교(상세 튜토리얼)Node.js를 사용하여 정적 서버를 구현하는 방법위 내용은 js를 사용하여 json을 호출하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!