최근 작업에는 ajax 작업이 많이 포함되어 있으며 백그라운드에서 수행해야 하는 작업을 수행해야 합니다. 현재 사용되는 ajax 기능은 백그라운드 사람에 의해 캡슐화되지만 jquery의 ajax를 기반으로 합니다. jquery가 없는 함수는 쓸모가 없습니다. 그리고 jquery의 ajax 메서드는 매우 완벽하고 직접 사용할 수 있다고 생각합니다. 이미 jquery가 있으면 해당 ajax가 헛되이 사용되지 않을 것입니다. jquery 없이도 사용할 수 있습니다.
그래서 저도 하나 작성하는데 하루를 보냈습니다. 매개변수와 호출 방법이 jquery의 ajax와 비슷합니다. xhr=XMLHttpRequest이기 때문입니다.
root.type = ops.type || 'responseText';
root.method = ops.method || 'GET';
root.async = ops.async || true;
root.data = ops.data || {};
root.complete = ops.complete || 함수 () {};
root.success = ops.success || function(){};
root.error = ops.error || 함수(들) { Alert(root.url '->status:' s 'error!')};
root.abort = req.abort;
root.setData = 함수(데이터) {
for(데이터의 변수) {
root.data[d] = 데이터[d];
}
}
root.send = 함수() {
var datastring = formatData(root.data),
sendstring,get = false,
비동기 = root.async,
완료 = 루트.완료,
메소드 = root.method,
유형=root.type;
If(메서드 === 'GET') {
root.url ='?' 데이터 문자열;
get = true;
}
req.open(method,root.url,async);
if(!get) {
req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
sendstring = 데이터 문자열;
~
//보내기 전에 onreadystatechange 메소드를 재설정합니다. 그렇지 않으면 새로운 동기화 요청이 발생하고 두 번의 성공적인 콜백이 실행됩니다(Chrome 등도 동기화 요청 중에 onreadystatechange를 실행합니다)
req.onreadystatechange = 비동기 ? 함수 () {
// console.log('async true');
If (req.readyState ==4){
완료();
If(req.status == 200) {
root.success(req[type]);
} else {
Root.error(req.status);
~
}
} : null;
req.send(sendstring);
if(!async) {
//console.log('async false');
완료();
root.success(req[type]);
}
}
root.url && root.send();
};
반환 함수(ops) {return new AJAX(ops);}
}();
1.url: 요청 주소를 작성하지 않으면 요청이 시작되지 않습니다. 하지만 작성하지 않고 강제로 보내면 문제가 발생하더라도 저를 비난하지 않습니다. 🎜> 2.방법: 'GET' 또는 'POST', 모두 대문자, 기본값 GET
3.data : 전송할 데이터가 첨부되며, 형식은 객체입니다
4.async: 비동기화 여부, 기본값은 true
5.type: 반환되는 데이터 유형은 responseText 또는 responseXML입니다. 기본값은 responseText
입니다.
6.complete: 요청이 완료되면 실행되는 함수
7.success: 요청이 성공했을 때 실행되는 함수
8.오류: 요청 실패 시 실행되는 함수
참고: 유형 매개변수는 jquery의 dataType만큼 풍부하지 않습니다. 기본 AJAX에는 responseText 또는 responseXML만 있습니다. json 데이터가 반환되면 텍스트를 json으로 변환하기 위해 성공 함수에서 직접 처리해야 합니다.
인스턴스화된 xhr 객체에는 두 가지 기능을 사용할 수 있습니다. 하나는 전송이고 호출 메서드는 xhr.send()이며 매개변수가 없으며 해당 기능은 초기화 중에 URL이 없으면 요청 프로세스를 시작하는 것입니다. 나중에 URL을 추가하고 수동으로 보내기를 시작할 수 있도록 send 메서드를 실행하세요. 보낼 때 URL이 없으면 요청이 실패하고 이 오류를 직접 찾을 수 없습니다.
또 다른 메소드는 setData입니다. 호출 메소드는 xhr.setData(data_obj)이고 해당 매개변수는 객체입니다. setData 메소드의 기능은 xhr의 데이터 속성 값을 부분적으로 바꾸는 것입니다. 이미 xhr.data에 페이지가 있습니다. 1. xhr.setData({page:2})를 사용하면 이미 데이터에 존재하는 다른 속성 값 에 영향을 주지 않고 해당 값을 업데이트할 수 있습니다.
통화 방법:
따라서 이 xhr 함수는 이미 페이징의 예를 들어 페이지가 로드될 때 xhr 객체를 초기화하고 페이지 넘김 요청이 시작되면 이를 변수 a1로 저장할 수 있습니다. 변경되었지만 pageNumber가 변경되었습니다. 이때 xhr의 setData 메소드를 호출하여 pageNumber를 변경할 수 있습니다.
a1.data = {…};
데이터뿐만 아니라 URL 변경, 성공 함수 변경, GET에서 POST로, 동기에서 비동기로... 변경 후 a1.send()를 다시 호출하는 등 인스턴스화된 xhr 객체 a1에 더 많은 변경을 수행할 수 있습니다. 방법을 사용하면 설정에 따라 요청이 다시 시작됩니다.
물론 전혀 관련이 없는 또 다른 Ajax 요청인 경우에는 이미 만들어진 a1을 사용할 필요가 없습니다. 다른 xhr을 인스턴스화하고 이를 a2라고 부를 수 있습니다.
xhr이라는 이름이 만족스럽지 않다면 직접 변경해야 합니다.
압축 및 암호화 버전도 제공됩니다. 비압축 버전은 주석을 제거한 2kb 정도이고, 압축 버전은 1.00kb입니다.