외국인이 작성한 XMLHttpRequest 코드는 다중 브라우저_javascript 기술과의 호환성을 지원합니다.
지난 며칠 동안 XMLHTTP 지원이 필요한 Asp.Net의 WebService를 호출하기 위해 Javascript를 사용하려고 생각했지만 Opera의 XMLHttpRequest가 끔찍하고 지원되지 않는다는 것을 발견했습니다. Opera에서는 java를 사용합니다. net.URL 및 기타 클래스를 사용하여 구현됩니다. 감히 혼자만 보관할 수는 없지만 모두가 즐길 수 있도록 여기에 게시합니다.
/*
크로스 브라우저 XMLHttpRequest v1.2
========================= =======
IE 및 Opera에서 Gecko 'XMLHttpRequest()' 기능을 에뮬레이션합니다. Opera에는
Sun Java 런타임 환경
작성: Andrew Gregory
http://www.scss.com.au/family/andrew/webdesign/xmlhttprequest/
이 저작물은 Creative Commons Attribution 라이선스에 따라 라이선스가 부여됩니다. 이 라이센스의
사본을 보려면 http://creativecommons.org/licenses/by-sa/2.5/를 방문하거나
Creative Commons, 559 Nathan Abbott Way, Stanford, California
에 편지를 보내십시오. 94305, 미국.
저작자 표시: 이 스크립트에 있는 내 이름과 웹 주소를 그대로 남겨주세요.
Opera에서는 지원되지 않음
---------
* 사용자/비밀번호 인증
* responseXML 데이터 구성원
Opera에서 완전히 지원되지 않음
---------------
* 비동기 요청
* abort()
* getAllResponseHeaders(), getAllResponseHeader(header)
*/
// IE 지원
if (window.ActiveXObject && !window.XMLHttpRequest) {
window.XMLHttpRequest = function() {
var msxmls = new 배열(
'Msxml2.XMLHTTP.5.0',
'Msxml2.XMLHTTP.4.0',
'Msxml2.XMLHTTP.3.0',
'Msxml2.XMLHTTP',
'Microsoft.XMLHTTP');
for (var i = 0; i < msxmls.length; i ) {
시도 {
새 ActiveXObject(msxmls[i]) 반환;
} catch (e) {
}
}
return null;
};
}
// Gecko 지원
/* ;-) */
// Opera 지원
if (window.opera && !window.XMLHttpRequest) {
window.XMLHttpRequest = function() {
this.readyState = 0; // 0=초기화되지 않음,1=로드 중,2=로드됨,3=대화형,4=완료
this.status = 0; // HTTP 상태 코드
this.statusText = '';
this._headers = [];
this._aborted = false;
this._async = true;
this._defaultCharset = 'ISO-8859-1';
this._getCharset = function() {
var charset = _defaultCharset;
var contentType = this.getResponseHeader('Content-type').toUpperCase();
val = contentType.indexOf('CHARSET=');
if (val != -1) {
charset = contentType.substring(val);
}
val = charset.indexOf(';');
if (val != -1) {
charset = charset.substring(0, val);
}
val = charset.indexOf(',');
if (val != -1) {
charset = charset.substring(0, val);
}
문자셋 반환;
};
this.abort = function() {
this._abort = true;
};
this.getAllResponseHeaders = function() {
return this.getAllResponseHeader('*');
};
this.getAllResponseHeader = 함수(헤더) {
var ret = '';
for (var i = 0; i < this._headers.length; i ) {
if (header == '*' || this._headers[i].h == header) {
ret = this._headers[i].h ': ' this._headers[i].v 'n';
}
}
반품 ret;
};
this.getResponseHeader = function(헤더) {
var ret = getAllResponseHeader(헤더);
var i = ret.indexOf('n');
if (i != -1) {
ret = ret.substring(0, i);
}
반품 ret;
};
this.setRequestHeader = function(헤더, 값) {
this._headers[this._headers.length] = {h:header, v:value};
};
this.open = function(method, url, async, user, password) {
this.method = method;
this.url = url;
this._async = true;
this._aborted = false;
this._headers = [];
if (arguments.length >= 3) {
this._async = async;
}
if (arguments.length > 3) {
opera.postError('XMLHttpRequest.open() - 사용자/비밀번호가 지원되지 않음');
}
this.readyState = 1;
if (this.onreadystatechange) {
this.onreadystatechange();
}
};
this.send = function(data) {
if (!navigator.javaEnabled()) {
alert("XMLHttpRequest.send() - Java를 설치하고 활성화해야 합니다.");
반품;
}
if (this._async) {
setTimeout(this._sendasync, 0, this, data);
// 이것은 실제로 비동기가 아니며 현재
// 실행 컨텍스트가 종료될 때까지 실행되지 않습니다.
} 그렇지 않으면 {
this._sendsync(data);
}
}
this._sendasync = function(req, data) {
if (!req._aborted) {
req._sendsync(data);
}
};
this._sendsync = function(data) {
this.readyState = 2;
if (this.onreadystatechange) {
this.onreadystatechange();
}
// 연결 열기
var url = new java.net.URL(new java.net.URL(window.location.href), this.url);
var conn = url.openConnection();
for (var i = 0; i < this._headers.length; i ) {
conn.setRequestProperty(this._headers[i].h, this._headers[i].v);
}
this._headers = [];
if (this.method == 'POST') {
/ POST 데이터
conn.setDoOutput(true);
var wr = new java.io.OutputStreamWriter(conn.getOutputStream(), this._getCharset());
wr.write(데이터);
wr.flush();
wr.close();
}
//응답 헤더 읽기
// 참고: getHeaderField() 메소드는 항상 null을 반환합니다.:(
var gotContentEncoding =
var gotContentLength = false
var gotContentType = false;
var gotDate = false;
var gotLastModified = false; 🎜> var hdrName = conn .getHeaderFieldKey(i);
var hdrValue = conn.getHeaderField(i);
if (hdrName == null && hdrValue == null) {
}
if (hdrName != null) {
this._headers[this._headers.length] = {h:hdrName, v:hdrValue};
스위치(hdrName.toLowerCase()) {
case 'content-encoding' : gotContentEncoding = true; break; case 'content-length' = true; break;
case 'content-type' = break; > case '날짜' : gotDate = true ; 부서지다;
케이스 '만료' : gotExpiration = true; 부서지다;
case 'last-modified' : gotLastModified = true; 부서지다;
}
}
}
// 누락된 헤더 정보를 입력해 보세요
var val;
val = conn.getContentEncoding();
if (val != null && !gotContentEncoding) this._headers[this._headers.length] = {h:'Content-encoding', v:val};
val = conn.getContentLength();
if (val != -1 && !gotContentLength) this._headers[this._headers.length] = {h:'Content-length', v:val};
val = conn.getContentType();
if (val != null && !gotContentType) this._headers[this._headers.length] = {h:'Content-type', v:val};
val = conn.getDate();
if (val != 0 && !gotDate) this._headers[this._headers.length] = {h:'Date', v:(new Date(val)).toUTCString()};
val = conn.getExpiration();
if (val != 0 && !gotExpiration) this._headers[this._headers.length] = {h:'Expires', v:(new Date(val)).toUTCString()};
val = conn.getLastModified();
if (val != 0 && !gotLastModified) this._headers[this._headers.length] = {h:'Last-modified', v:(new Date(val)).toUTCString()};
//응답 데이터 읽기
var reqdata = '';
var stream = conn.getInputStream();
if (스트림) {
var reader = new java.io.BufferedReader(new java.io.InputStreamReader(stream, this._getCharset()));
var 행;
while ((line = reader.readLine()) != null) {
if (this.readyState == 2) {
this.readyState = 3;
if (this.onreadystatechange) {
this.onreadystatechange();
}
}
reqdata = line 'n';
}
reader.close();
this.status = 200;
this.statusText = '확인';
this.responseText = reqdata;
this.readyState = 4;
if (this.onreadystatechange) {
this.onreadystatechange();
}
if (this.onload) {
this.onload();
}
} else {
//오류
this.status = 404;
this.statusText = '찾을 수 없음';
this.responseText = '';
this.readyState = 4;
if (this.onreadystatechange) {
this.onreadystatechange();
}
if (this.onerror) {
this.onerror();
}
}
};
};
}
// ActiveXObject 에뮬레이션
if (!window.ActiveXObject && window.XMLHttpRequest) {
window.ActiveXObject = function(type) {
스위치(type.toLowerCase()) {
case 'microsoft.xmlhttp':
케이스 'msxml2.xmlhttp':
케이스 'msxml2.xmlhttp.3.0':
케이스 'msxml2.xmlhttp.4.0':
케이스 'msxml2.xmlhttp.5.0 ':
새 XMLHttpRequest()를 반환합니다.
}
null을 반환합니다.
};
}

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











프론트 엔드 개발시 프론트 엔드 열지대 티켓 인쇄를위한 자주 묻는 질문과 솔루션, 티켓 인쇄는 일반적인 요구 사항입니다. 그러나 많은 개발자들이 구현하고 있습니다 ...

기술 및 산업 요구에 따라 Python 및 JavaScript 개발자에 대한 절대 급여는 없습니다. 1. 파이썬은 데이터 과학 및 기계 학습에서 더 많은 비용을 지불 할 수 있습니다. 2. JavaScript는 프론트 엔드 및 풀 스택 개발에 큰 수요가 있으며 급여도 상당합니다. 3. 영향 요인에는 경험, 지리적 위치, 회사 규모 및 특정 기술이 포함됩니다.

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.

동일한 ID로 배열 요소를 JavaScript의 하나의 객체로 병합하는 방법은 무엇입니까? 데이터를 처리 할 때 종종 동일한 ID를 가질 필요가 있습니다 ...

이 기사에서 시차 스크롤 및 요소 애니메이션 효과 실현에 대한 토론은 Shiseido 공식 웹 사이트 (https://www.shiseido.co.jp/sb/wonderland/)와 유사하게 달성하는 방법을 살펴볼 것입니다.

Console.log 출력의 차이의 근본 원인에 대한 심층적 인 논의. 이 기사에서는 Console.log 함수의 출력 결과의 차이점을 코드에서 분석하고 그에 따른 이유를 설명합니다. � ...

JavaScript를 배우는 것은 어렵지 않지만 어려운 일입니다. 1) 변수, 데이터 유형, 기능 등과 같은 기본 개념을 이해합니다. 2) 마스터 비동기 프로그래밍 및 이벤트 루프를 통해이를 구현하십시오. 3) DOM 운영을 사용하고 비동기 요청을 처리합니다. 4) 일반적인 실수를 피하고 디버깅 기술을 사용하십시오. 5) 성능을 최적화하고 모범 사례를 따르십시오.

프론트 엔드에서 VSCODE와 같은 패널 드래그 앤 드롭 조정 기능의 구현을 탐색하십시오. 프론트 엔드 개발에서 VSCODE와 같은 구현 방법 ...
