본문 바로가기
JSP/Muzi

[Javascript] 나만의 Ajax 만들기

by 미눅스[멘토] 2024. 8. 26.
728x90

 

e7e샘의 나만의 Ajax

<!DOCTYPE html>
<meta charset="UTF-8">
<div id="disp"></div>
<button onclick="fAjax()">아작스</button>
<button onclick="fAjax2()">아작스2</button>
<button onclick="fAjax3()">아작스3</button>
<script>
//매개 변수들을 한 덩어리로 보내면 훨씬 플렉서블 해짐!!
//어쩌다 마주 친 그대 봤는뎅 재미있음. (멜로 아니공 스릴러)

const $={}; //빈 객체 생성(내맘) -> 네임스페이스용

// $객체의 메소드롱 ajax를 만듬, 이제 부터 $.ajax라고 써야함
// 요따구로 해성 $.ajax(jQuery)가 만들어짐(역시 별거 아니었음!)
$.ajax=function(pSet){
    let xhr = new XMLHttpRequest();
    xhr.open(pSet.method,pSet.url,pSet.async);
    xhr.onreadystatechange = function(){
        if (xhr.readyState == 4 && xhr.status == 200){
            if(pSet.dataType =="json"){
                pSet.success(JSON.parse(xhr.responseText));
            }else{
                pSet.success(xhr.responseText);
            }
        }
    }
    xhr.send();
}

const myDisp =   document.querySelector('#disp');
   
// DRY(Do Not Repeat Yourself) 반복하지마랑!
function fDry(pURL,pCallback){ //매개변수를 갯수에 영향받지 않게 더 플렉시블하게 만들 수 잇음!
    let xhr = new XMLHttpRequest();
    xhr.open('GET',pURL,true);//세번쨰 매개변수로 (true) 비동기,(fals)동기 구분
    xhr.onreadystatechange = function(){
        if(xhr.readyState==4 && xhr.status==200){
            //가져온 결과 xhr.responseText
            //달라야 하는 부분
            pCallback(xhr.responseText);
            alert("현학이 메롱!");
        }
    }
    xhr.send();
    console.log("값 보이냥?",xhr.responseText); //요걸 이해했낭?
    alert("병철이 메롱!");

}

//3개 함수가 다 똑같음!...
function fCommon(pRslt){
    myDisp.innerHTML = pRslt;
}

function fAjax(){
    $.ajax({
        method:"get",
        url : "data.csv",
        async : true,
        success: function(rslt){
            myDisp.innerHTML = rslt;
        }
    })

    //fDry("data.csv",fCommon);
}
function fAjax2(){
    $.ajax({
        method:"get",
        url : "data.html",
        async : true,
        success: function(rslt){
            myDisp.innerHTML = rslt;
        }
    })
    //fDry("data.html",fCommon);
}
function fAjax3(){
    $.ajax({
        method:"get",
        url : "data.json",
        async : true,
        dataType : "json",
        success: function(rslt){
            //CSR(Client Side Rendering) vs SSR(Server Side Rendering)
            console.log("결광:",rslt);
            //rslt 결과를 table(<table>)형태로 disp에 출력하시오
            let tbleStr = '<table border="1">';
                tbleStr+= "<tr><th>이름</th><th>나이</th><th>별명</th></tr>"
                for(let i=0; i<rslt.length; i++){
                    tbleStr+= `<tr><td>${rslt[i].name}</td><td>${rslt[i].age}</td><td>${rslt[i].alias}</td></tr>`
                }
                tbleStr += '</table>';
                myDisp.innerHTML=tbleStr;
            //let jsonData = JSON.parse(rslt);
            //myDisp.innerHTML =`${rslt[0].name}는${rslt[0].alias}`;
        }
    });
    /*
    fDry("data.json",function(pRslt){
        let jsonData = JSON.parse(pRslt); //문자열을 JSON으로 변환
        myDisp.innerHTML =jsonData[2].name + "는 " + jsonData[2].alias;
    });
    */
}

/*
function fAjax3(){
    let xhr = new XMLHttpRequest();
    xhr.open('GET',"data.json",true);
    xhr.onreadystatechange = function(){
        if(xhr.readyState==4 && xhr.status==200){
            console.log(xhr.responseText);
            // 객체(배열,json) 문자열이라면 객체로 변환해서 쓰는 것이
            // 편해서 정신건강에 아주 좋음.
            console.log(JSON.parse(xhr.responseText));
        }
    }
    xhr.send();
}

function fAjax2() {
    //바로 테스트, 서버에서 data.html을 아작스롱 가져와삼
    //disp안에 넣으시옹! 제한시간 10초
    let xhr = new XMLHttpRequest();
    xhr.open('GET',"data.html",true);
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status == 200){
            console.log("항상 결과체크",xhr.responseText);
            myDisp.innerHTML += xhr.responseText;
        }
    }
    xhr.send();
}

function fAjax(){
    //지역변수로 사용함당!!
    let xhr = new XMLHttpRequest(); //통신 심부름꾼 아저씨 생성
                                //컴터에선 맘대로 생성 가능(요금 없음)
    //xhr("방식","장소","비동기 여부");   //할일 지정
    xhr.open("get","data.csv",true);         //할일 지정
    //시킨일이 끝났는지 모니터링(이벤트 기반)
    xhr.onreadystatechange = function(){
        //중간과정은 관심이 없엉!(무시, 끝났는지만 관심)
        if(xhr.readyState == 4 && xhr.status == 200){
            console.log("가져온 결과값: ",xhr.responseText);
        }
    }  
    //이벤트 등록을
    xhr.send(); //시킨대로 하시오
}
*/
//ajax(Asynchronous Javascript XML)의 중요성은 말로 다 표현할 수 없음
// 가장 근본 모양
//전역 변수? 머겅, 현실에 비유하면 심부름꾼 1명을 이지매하겠다는 이야기
//그래서 아작스 변수는 전역변수로 쓰지 않는당!(기본!!!)
//결론은 항상 함수속에 들어가 있어야 된다는 이야깅!


</script>