온고 js 시리즈 (12) - ajax & & 장단 점 & node 백 엔 드

전단 학습: 튜 토리 얼 & 개발 모듈 화 / 규범화 / 공정 화 / 최적화 & 도구 / 디 버 깅 & 주목 할 만 한 블 로그 / Git & 면접 - 전단 자원 집합
도끼 정정: Ajax
JavaScript - Ajax & node 백 엔 드
2005 년 Jesse James Garrett 는 'Ajax: A new Approach to Web Applications' 라 는 제목 의 글 을 발표 했다.그 는 이 글 에서 Ajax, 즉 Asynchronous JavaScript And XML 이라는 기술 을 소개 했다.이 기술 은 전체 페이지 를 새로 고치 지 않 고 서버 에 데 이 터 를 요청 할 수 있어 더 좋 은 사용자 체험 을 가 져 올 수 있다.
XMLHttpRequest
Ajax 기술 핵심 은 XMLHttpRequest 대상 (XHR 로 약칭) 으로 서버 에 요청 을 보 내 고 서버 응답 을 분석 하 는 원활 한 인 터 페 이 스 를 제공 합 니 다.서버 에서 더 많은 정 보 를 비동기 방식 으로 얻 을 수 있 으 며, 웹 페이지 를 새로 고치 지 않 은 상태 에서 서버 의 최신 데 이 터 를 페이지 로 업데이트 할 수 있 습 니 다.IE7 +, Firefox, Opera, Chrome, Safari 는 모두 원생 XHR 대상 을 지원 합 니 다.
var xhr = new XMLHttpRequest();  //   XMLHttpRequest

이 제 는 IE6 를 호 환 하지 않 아 도 된다 고 하지만 개발 원 가 를 조금 이라도 올 리 지 않 아 도 된다 는 말 이 있다.하지만 공부 할 때 는 잘 만 져 야 합 니 다.IE6 및 이하, 그러면 우 리 는 ActiveX 대상 을 MSXML 라 이브 러 리 를 통 해 실현 해 야 한다.호 환:
function CreateXHR() {
    if(window.XMLHttpRequest){
        return new XMLHttpRequest();
    }else{
        return new ActiveXObject('Microsoft.XMLHTTP');
    }
}
var xhr = new CreateXHR();  

Ajax 구현
1. 정례 화 된 XML HttpRequest
var xhr = new CreateXHR();

2. 서버 연결
XHR 대상 을 사용 할 때 open () 방법 을 먼저 호출 해 야 합 니 다. 세 가지 인 자 를 받 아들 여야 합 니 다. 보 낼 요청 형식 (get, post), 요청 한 URL 과 비동기 여 부 를 표시 합 니 다. true 는 비동기 이 고 false 는 동기 화 입 니 다.
xhr.open('get', 'xzavier', true); 

open () 방법 은 진정 으로 요청 을 보 내지 않 고 보 낼 수 있 도록 요청 을 시작 합 니 다.send () 전에 요청 머리 를 사용자 정의 로 설정 하 는 방법 이 있 습 니 다. setRequestHeader ('key', 'value');오픈 방법 뒤에 놓 고 send 방법 전에 놓 으 세 요.단, 일반적으로 post 에서 양식 을 제출 할 때 사용 합 니 다:
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

3. 요청 보 내기
open () 방법 이 준 비 된 후에 send () 방법 으로 요청 을 보 내 고 send () 방법 으로 인 자 를 받 아들 여 요청 주체 로 보 내 는 데 이 터 를 받 습 니 다.필요 하지 않 으 면 null 을 작성 해 야 합 니 다.
xhr.send(null); 

send () 방법 을 실행 하면 서버 에 요청 이 전 송 됩 니 다.
4. 응답 받 기
서버 에 요청 을 보 내 면 응답 을 받 은 데 이 터 는 XHR 대상 의 속성 을 자동 으로 채 웁 니 다.모두 네 개의 속성 이 있 습 니 다. 앞의 세 개 를 자주 사용 합 니 다.
                               
responseText                
status             HTTP   
statusText      HTTP      
responseXML                "text/xml" "application/xml",          XML DOM   

응답 을 받 은 후, 응답 이 성공 적 으로 돌 아 왔 는 지 확인 하기 위해 status 속성 을 첫 번 째 로 검사 합 니 다.보통 HTTP 상태 코드 는 200 을 성공 의 표식 으로 합 니 다.HTTP 상태 코드:
HTTP                             
200   OK                           
400   Bad Request                        
404   Not found             URL   
500   Internal Server Error                
503   ServiceUnavailable                 

비교적 자주 사용 하 는 상태 코드 를 열거 합 니 다. 상세 한 것 은 상태 코드 동기 화 방식 입 니 다.
var oButton = document.getElementById('myButton');
oButton.onclick = function() {
    var xhr = new createXHR();
    xhr.open('get', 'xzavier', false); //false  
    xhr.send(null);
    if (xhr.status == 200) { 
        console.log(xhr.responseText); 
    } else {
        console.log('error status:' + xhr.status + 'info:' + xhr.statusText);
    }
}

동기 화 는 이 기술 의 사용 방식 일 뿐, 매우 드 물 며, 비동기 호출 을 사용 하 는 것 이 야 말로 자주 사용 하 는 것 이다.비동기 호출 을 사용 할 때 readystatechange 이 벤트 를 촉발 한 다음 ready State 속성, 속성 값 을 검출 해 야 합 니 다:
                    
  0                open()  
  1                  open()  ,   send()  
  2                  send()  ,     
  3                         
  4                         

비동기 방식:
var oButton = document.getElementById('myButton');
oButton.onclick = function() {
    var xhr = new createXHR();
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            if (xhr.status == 200) {
                alert(xhr.responseText);
            } else {
                console.log('error status:' + xhr.status + 'info:' + xhr.statusText);
            }
        }
    }
    xhr.open('get', '/xzavier', true); //true  
    xhr.send(null);
}

전체 ajax 비동기
  • XML HttpRequest 대상 을 만 듭 니 다. 즉, 비동기 호출 대상 을 만 듭 니 다
  • 새로운 HTTP 요청 을 만 들 고 이 HTTP 요청 방법, URL 및 비동기 여 부 를 지정 합 니 다
  • HTTP 요청 상태 변화 에 응답 하 는 함수 설정
  • HTTP 요청 보 내기
  • 비동기 호출 된 데 이 터 를 가 져 옵 니 다
  • JavaScript 와 DOM 을 사용 하여 부분 리 셋
  • GET 와 POST
    서버 요청 을 제공 하 는 과정 에서 GET 와 POST 두 가지 방식 이 있 습 니 다.GET: 일반적으로 정보 획득 에 사 용 됩 니 다. URL 로 파 라 메 터 를 전달 하 는 것 은 정 보 를 보 내 는 수량 에 제한 이 있 습 니 다. 보통 2000 개의 문자 POST: 일반적으로 서버 의 자원 을 수정 하 는 데 사 용 됩 니 다. 보 낸 정보 에 제한 이 없습니다. GET: 주소 표시 줄 을 통 해 값 을 전달 하 는 POST: 폼 을 제출 하여 값 을 전달 하 는 것 입 니 다. 다음 과 같은 경우 POST 요청 을 사용 하 십시오.
  • 캐 시 파일 을 사용 할 수 없습니다 (서버 에 있 는 파일 이나 데이터 베 이 스 를 업데이트 합 니 다)
  • 서버 에 대량의 데 이 터 를 전송 (POST 데이터 양 제한 없 음)
  • 알 수 없 는 문 자 를 포함 하 는 사용자 의 입력 을 보 낼 때 POST 는 GET 보다 안정 적 이 고 신뢰 할 수 있 습 니 다
  • GET
    GET 요청 은 서버 에 정 보 를 조회 하 는 데 가장 흔 한 요청 형식 입 니 다.필요 시 서버 에 제출 할 수 있 도록 검색 문자열 인 자 를 URL 의 끝 에 추가 할 수 있 습 니 다.
    xhr.open('get', 'xzavier?name=' + name + '&sex='+ sex , true);
    

    URL 후의 물음표 로 서버 에 키 값 대 데 이 터 를 전달 하고 서버 는 응답 데 이 터 를 되 돌려 받 습 니 다.특수 문자 전송 에 발생 하 는 문 제 는 encodeURIComponent () 를 사용 하여 인 코딩 처리 할 수 있 습 니 다. 중국어 문자 의 반환 및 전송 은 페이지 저장 과 utf - 8 형식 으로 설정 하면 됩 니 다.
    xhr.open('get', 'xzavier?name=' + encodeURIComponent(name) + '&sex='+ encodeURIComponent(sex) , true);

    POST
    POST 요청 은 매우 많은 데 이 터 를 포함 할 수 있 습 니 다. 우 리 는 폼 을 사용 하여 제출 할 때 많은 POST 전송 방식 을 사용 합 니 다.POST 가 요청 한 데 이 터 를 보 내 면 URL 뒤 를 따 르 지 않 고 send () 방법 으로 서버 에 데 이 터 를 제출 합 니 다.서버 에 POST 요청 을 보 내 는 것 은 분석 메커니즘 때문에 요청 머리 처리 가 필요 합 니 다.
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

    Ajax 패키지
    jquery 의 ajax 방법 은 매우 좋 습 니 다. 많은 코드 를 써 서 get 인지 post 인지, 비동기 인지 동기 화 할 필요 가 없습니다.물론, 자신 이 사용 하면 jquery 는 이미 완벽 합 니 다. 자신 이 포장 한 것 보다 훨씬 잘 사용 되 고 있 습 니 다. 물론 전 세계 인터넷 의 대부분 은 jquery 플러그 인 을 사용 하고 있 습 니 다.여기 서 jquery 의 ajax 는 말 하지 않 고 우리 스스로 하 나 를 포장 합 니 다. 하 나 를 포장 하 는 것 도 기초 지식 에 대한 공고 함 과 향상 입 니 다.
    //         
    function params(data) {
        var arr = [];
        for (var i in data) {
            arr.push(encodeURIComponent(i) + '=' + encodeURIComponent(data[i]));
        }
        return arr.join('&');
    }
    function ajax(obj) {
        var xhr = createXHR();
        obj.data = params(obj.data);
        if (obj.async === true) {
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4) {
                    callback();
                }
            };
        }
        if (obj.method === 'get'){
            obj.url += obj.url.indexOf('?') == -1 ? '?' + obj.data : '&' + obj.data;
        }
        xhr.open(obj.method, obj.url, obj.async);
        if (obj.method === 'post') {
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            xhr.send(obj.data);    
        } else {
            xhr.send(null);
        }
        if (obj.async === false) {
            callback();
        }
        function callback() {
            if (xhr.status == 200) {
                obj.success(xhr.responseText);
            } else {
                console.log('error status:' + xhr.status + 'info:' + xhr.statusText);
            }    
        }
    }

    사용:
    var oButton = document.getElementById('myButton');
    oButton.onclick = function() {
        ajax({
            method : 'post',
            url : 'xzavier',
            data : {
                'name' : 'xzavier',
                'sex' : 'man'
            },
            success : function (result) {
                console.log(result);
            },
            async : true
        });
    }

    학습 용 으로 다른 곳 에 사용 하려 면 포장 해 야 할 것 이 아직 많다.
    백 엔 드 구현
    백 엔 드 지식 을 조금 독학 할 수 있어 서 공부 하기에 편리 하 다.예 를 들 어 phop, 물론, 지금 node 가 앞에서 이렇게 잘 나 가 는데 어떻게 사용 하지 않 을 수 있 습 니까?여 기 는 node 설치, 건설 프로젝트 등 지식 을 많이 이야기 하지 않 고 나중에 좀 더 익 혀 서 쓰 세 요.
    var oButton = document.getElementById('myButton');
    var sName = document.getElementById('isName').value;
    oButton.onclick = function() {
        ajax({
            method : 'post',
            url : 'isuser',
            data : sName,
            success : function () {
                console.log('useable name');
            },
            async : false
        });
    }

    node 단: node 학습 (박 령 의 책: 깊이 들 어가 서 nodeJs) / / 사용자 등록 시 사용자 이름 이 존재 하 는 지 판단 합 니 다.
    app.post('/isuser', function(req, res) {
      var username = req.body.username;
      User.isUser(username, function(status){  //     ,      ,       
        if(status == 'OK'){
          res.send(200);          
        }else{
          res.send(404);
        }
      });
    });
    

    Ajax 장단 점
    Ajax 가 가 져 온 장점: 1. 비동기 모드 를 통 해 동적 리 셋 을 실현 하고 사용자 체험 을 향상 시 켰 습 니 다. 2. 브 라 우 저 와 서버 간 의 전송 을 최적화 시 켰 고 불필요 한 데이터 왕복 을 줄 였 습 니 다. 대역 폭 점용 을 줄 였 습 니 다. 3. Ajax 가 클 라 이언 트 에서 실 행 했 고 서버 가 맡 았 던 일 부 를 맡 았 으 며 큰 사용자 의 서버 부하 도 줄 였 습 니 다.
    Ajax 의 단점: 1. Ajax 는 브 라 우 저 back 버튼 2, 보안 문 제 를 지원 하지 않 습 니 다. Ajax 는 서버 와 상호작용 하 는 디 테 일 을 노출 했 습 니 다. 3. 검색엔진 에 대한 지원 이 약 합 니 다. 4. 프로그램의 이상 메커니즘 을 파 괴 했 습 니 다. 5. 디 버 깅 이 쉽 지 않 지만 연구 개발 자 는 기술 단점 을 극복 하고 보완 하 며 기술적 장점 을 발휘 하 는 존재 O (∩ ∩) O ~

    좋은 웹페이지 즐겨찾기