최근에 ajax를 사용하여 서버 프로그램을 개발 중인데 IE 브라우저가 xmlhttprequest 개체를 지원하지 않고 Microsoft.XMLHTTP 컨트롤을 찾을 수 없다는 것을 발견했습니다.
해결해야 할 문제가 발생합니다. 해결 방법은 다음과 같습니다.
1. regsvr32 msxml3.dll을 실행합니다.
2. 기성 프레임워크를 사용하여 Ajax를 수행합니다.
3. 코드 최적화:
if(window.ActiveXObject)
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
그렇지 않은 경우(window.XMLHttpRequest)
{
xmlHttp = 새로운 XMLHttpRequest();
}
if(handle_s == null)
handler_s = "bin/normal.py/db";
this.xmlHttp.onreadystatechange = handler_l;
this.xmlHttp.open("GET",handle_s,true);
this.xmlHttp.send(null);
또는 브라우저 결정
var agt = navigator.userAgent.toLowerCase();
var is_ie = (agt.indexOf("msie") != -1);
var is_ie5 = (agt.indexOf("msie 5") != -1);
var is_opera = (agt.indexOf("opera") != -1);
var is_mac = (agt.indexOf("mac") != -1);
var is_gecko = (agt.indexOf("gecko") != -1);
var is_safari = (agt.indexOf("safari") != -1);
function CreateXmlHttpReq(handler) {
var xmlhttp = null;
만약 (is_ie) {
// ie5 또는 ie6이 보장됩니다.
var control = (is_ie5) ? "Microsoft.XMLHTTP": "Msxml2.XMLHTTP"
;
xmlhttp = 새로운 ActiveXObject(컨트롤);
xmlhttp.onreadystatechange = 핸들러;
} 잡기 (예) {
// TODO: 더 나은 도움말 메시지
Alert("Active 스크립팅과 ActiveX 컨트롤을 활성화해야 합니다.");
}
} else {
// 모질라
xmlhttp = 새로운 XMLHttpRequest();
xmlhttp.onload = 핸들러;
xmlhttp.onerror = 핸들러
}
xmlhttp를 반환;
}
또는
<script 언어="javascript">
var http_request = false;
function send_request(url) {//초기화, 지정 처리 함수, 요청을 보내는 함수
http_request = 거짓;
//XMLHttpRequest 객체 초기화 시작
if(window.XMLHttpRequest) { //모질라 브라우저
http_request = 새로운 XMLHttpRequest();
if (http_request.overrideMimeType) {//MiME 카테고리 설정
http_request.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject) { // IE 브라우저
노력하다 {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} 잡기 (e) {
노력하다 {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} 잡기 (e) {}
}
}
if (!http_request) { //예외, 객체 인스턴스 생성에 실패했습니다.
window.alert("XMLHttpRequest 객체 인스턴스를 생성할 수 없습니다.");
거짓을 반환;
}
http_request.onreadystatechange = 프로세스요청;
// 요청을 보내는 방법과 URL, 다음 코드를 동기적으로 실행할지 여부를 결정합니다.
http_request.open("GET", url, true);
http_request.send(null);
}
// 반환된 정보를 처리하는 함수
함수 프로세스요청() {
if (http_request.readyState == 4) { // 객체 상태 확인
if (http_request.status == 200) { //정보가 성공적으로 반환되었으므로 정보 처리를 시작합니다.
var returnObj = http_request.responseXML;
var xmlobj = http_request.responseXML;
var 직원 = xmlobj.getElementsByTagName("직원");
var FeedbackStr = "";
for(var i=0;i<employees.length;i++) { // Employees.xml의 내용을 읽기 위해 루프를 돌립니다.
var 직원 = 직원[i];
FeedbackStr += "Employee:" + Employee.getAttribute("name");//라벨의 지정된 속성을 가져옵니다.
FeedbackStr += "Position:" + Employee.getElementsByTagName("job")[0].firstChild.data;//지정된 태그의 첫 번째 데이터 가져오기
FeedbackStr += "급여:" + Employee.getElementsByTagName("급여")[0].firstChild.data;
FeedbackStr += "rn";
}
경고(feedbackStr);
} else { //페이지가 비정상입니다.
Alert("요청하신 페이지에 예외가 있습니다.");
}
}
}
</script>
http://www.cnblogs.com/skylaugh/archive/2006/11/20/566164.html