ajax不适用于IE,但与所有其他浏览器配合良好

ajax not working with IE but working well with all other browsers

本文关键字:浏览器 其他 适用于 不适用 IE ajax      更新时间:2023-09-26

请有人告诉我为什么这段代码适用于所有浏览器 IE 的一部分,我似乎找不到问题所在,是兼容性问题还是我的代码缺少Microsoft需要的东西,这段代码旨在提交表单并从 XMLHttpRequest 对象获得响应

//defining XHR object
 function createXHR() {
     if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
         return new XMLHttpRequest();
     } else { // code for IE6, IE5
         //return new ActiveXObject("Microsoft.XMLHTTP");
         if (window.XMLHttpRequest) {
             return new window.XMLHttpRequest;
         } else {
             try {
                 return new ActiveXObject("MSXML2.XMLHTTP.3.0");
             } catch (ex) {
                 return null;
             }
         }
     }
 }
 //function to make parameter and value pairs
 function encodeNameAndValue(sName, sValue) {
     var sParam = encodeURIComponent(sName);
     sParam += "=";
     sParam += encodeURIComponent(sValue);
     return sParam;
 }
 //function to get the form fields
 function getRequestBody(oForm) {
     //array to hold the params
     var aParams = new Array();
     //get your reference to the form
     var oForm = document.form1;
     //iterate over each element in the form-
     for (var i = 0; i < oForm.elements.length; i++) { //start of for loop to loop through   form elements---
         //get reference to the field
         var oField = oForm.elements[i];
         //different behavior based on the type of field-----------------     switch                                                 statement---------------
         switch (oField.type) {
             //buttons - we don’t care
         case "button":
         case "submit":
         case "reset":
             break;
             //checkboxes/radio buttons - only return the value if the control is
             //checked.
         case "checkbox":
         case "radio":
             if (!oField.checked) {
                 break;
             }
             //text/hidden/password all return the value
         case "text":
         case "hidden":
         case "password":
             aParams.push(encodeNameAndValue(oField.name, oField.value));
             break;
             //everything else
         default:
             switch (oField.tagName.toLowerCase()) {
             case "select":
                 aParams.push(encodeNameAndValue(oField.name,
                     oField.options[oField.selectedIndex].value));
                 break;
             default:
                 aParams.push(encodeNameAndValue(oField.name,
                     oField.value));
             }
         }
     } //end of for loop
     return aParams.join("&");
 }
 //function to make the make asynch request
 function sendRequest() {
     var oForm = document.form1;
     var sBody = getRequestBody(oForm);
     var oXHR = createXHR();
     oXHR.open("post", oForm.action, true);
     oXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     oXHR.onreadystatechange = function () {
         if (oXHR.readyState == 4) {
             if (oXHR.status == 200) {
                 //---------------------------------------------------
                 saveResult(oXHR.responseText);
             } else {
                 saveResult("An error occurred: " + oXHR.statusText);
                 //---------------------------------------------------
             }
         }
     };
     oXHR.send(sBody);
 }
 //function to send data to the display div
 function saveResult(sMessage) {
     var divStatus = document.getElementById("divStatus");
     divStatus.innerHTML = "" + sMessage;
 }

你必须编写一些特定于 ie 8 和 9 的代码

http://msdn.microsoft.com/en-us/library/dd573303%28v=vs.85%29.aspx

如果您希望它在IE中工作而无需更改代码,那么

更改 IE 设置 互联网选项 -> 安全性 ->自定义级别 ->杂项 ->跨域启用 Access 数据源

出现此问题的原因是 Activex 对象被阻止。

相关文章: