我的ajax应用程序在Firefox中运行良好,但在IE8中运行不正常。具体来说,ajax功能不起作用。
这是我正在使用的代码:
function createXMLHttpRequest()
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject)
{
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
这是错误:
Object doesn't support this property or method
ajax.js
Code:0
Line : 6
Char : 5
它在Firefox中运行良好。
我的代码有什么问题?
答案 0 :(得分:5)
直接出于jQuery:
return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") :
new XMLHttpRequest();
答案 1 :(得分:4)
考虑使用如下函数:
function createXMLHttpRequest() {
var xmlhttp = false;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else if(window.ActiveXObject) {
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
xmlhttp = false;
}
}
}
return xmlhttp;
};
在ActiveX中测试新的XMLHttp插件,或默认为旧插件。
更新:请改为尝试:
function createXMLHttpRequest()
{
var xmlhttp, bComplete = false;
try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e) { try { xmlhttp = new XMLHttpRequest(); }
catch (e) { xmlhttp = false; }}}
if (!xmlhttp) return null;
this.connect = function(sURL, sMethod, sVars, fnDone)
{
if (!xmlhttp) return false;
bComplete = false;
sMethod = sMethod.toUpperCase();
try {
if (sMethod == "GET")
{
xmlhttp.open(sMethod, sURL+"?"+sVars, true);
sVars = "";
}
else
{
xmlhttp.open(sMethod, sURL, true);
xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
xmlhttp.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
}
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4 && !bComplete)
{
bComplete = true;
fnDone(xmlhttp);
}};
xmlhttp.send(sVars);
}
catch(z) { return false; }
return true;
};
return this;
}
function getModIndex(val) {
var divEle = "IndexDiv" + val;
var request = createXMLHttpRequest();
if ( !request ) {
alert( request )
return false
}
var callback = function( oXML ) {
document.getElementById( divEle ).innerHTML = oXML.responseText;
}
request.connect(
'../ajax/ajax-GetIndex.php',
'POST',
'id=' + val,
callback
);
}
答案 2 :(得分:2)
你可以尝试这段代码:
function createXMLHttpRequest() {
if (typeof XMLHttpRequest != "undefined") {
return new XMLHttpRequest();
} else if (typeof ActiveXObject != "undefined") {
return new ActiveXObject("Microsoft.XMLHTTP");
} else {
throw new Error("XMLHttpRequest not supported");
}
答案 3 :(得分:2)
我遇到了同样的问题 - 重新加载页面似乎消除了错误,但是第一次访问页面时我遇到了与luvboy相同的错误。
我认为基本问题与IE 8有关,因为首次加载XMLHttpRequest函数会出现问题。我放弃了寻找真正原因的原因,但似乎其他人也有类似的怪癖:http://www.daniweb.com/forums/thread299941.html
Dan Beam的答案似乎运行得很好,而且代码更少 - 它首先检查ActiveXObject,IE似乎更满意。
答案 4 :(得分:2)
“我不确定我是否确切地知道问题是什么,但我确实找到了一个解决方案。我打算用jQuery重新编码它并注意到我在XMLHttpRequest之前检查ActiveX的代码,所以我只是将我的代码翻转为首先检查ActiveX,现在它适用于IE8和FF。
似乎问题是IE8在重新加载页面后无法创建XMLHttpRequest(我不知道为什么)所以让它创建一个ActiveXObject而不是让它一直工作。“我给出了这个答案{ {3}}
一直有效:D:D !!
答案 5 :(得分:1)
至少在Vista上的IE8中,用户需要关闭“原生XMLHTTP支持”(声音违反直觉)。要做到这一点:
当尝试POST到HTTPS时,您可能会通过查找其“message”属性为“Access is denied”(或类似内容)的JavaScript异常来检测是否需要执行此Web应用程序通过AJAX对象的URL。
(使用Prototype,您可以将onException键值对添加到与onSuccess和onFailure相同的位置。它看起来像: onException的:函数(irrelevant_object,EXC){警报(exc.message);}
函数体比显示抛出异常的本质要多得多。)
如果抛出相关异常,请设置一个方框,告诉用户如何关闭他/她的IE8副本中的XMLHTTP项目。
答案 6 :(得分:1)
一直有类似的问题并已阅读大量解决方案但对我无效
当我终于弄清楚时,我比平常更多地诅咒微软。
以下代码将在Mozilla中起作用,因为它决定是否设置了值,它在选项标签之间使用值发送到SetContactForm,而IE8发送空白值
<select name="contact_type" id="contact_type" onChange="SetContactForm(this.value)">
<option>email</option>
<option>address</option>
</select>
让它工作只需添加一个值
<select name="contact_type" id="contact_type" onChange="SetContactForm(this.value)">
<option value="email">email</option>
<option value="address">address</option>
</select>
我希望这能节省一些头脑。
答案 7 :(得分:0)
您可以尝试为Microsoft.XMLHTTP使用大写小写,即(Microsoft.XMLHttp)IE8是非凡的区分大小写
答案 8 :(得分:0)
这是用于获取文本文件内容的代码(位置清理)...适用于IE 8和Chrome:
var fileName = "http://www.example.com/myfile.txt";
var txtFile;
if (window.ActiveXObject)
{
try {// code for IE8
txtFile = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try { // code for IE6, IE5
txtFile = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
txtFile = false;
}
}
}
else if (window.XMLHttpRequest)
{
// code for IE7, Firefox, Chrome, Opera, Safari
txtFile = new XMLHttpRequest();
}
txtFile.open("GET",fileName,false);
txtFile.send();
var txtDoc=txtFile.responseText;
// alert(txtDoc); // this will give you the text contents