2011-05-23 45 views
2

所以我有一个AJAX项目,它使用XmlHttpRequest对象从服务器端动态检索数据(在我的情况下,我使用JSON与PHP/MySQL相关的情况下) 。几乎所有的HTML元素都是通过javascript DOM动态创建的,所以它是做这项工作的.js文件。在Internet Explorer中AJAX麻烦! (代码目前适用于Firefox和Chrome)

下面是一个典型的.js文件我用得到从PHP服务器端的信息,然后生成HTML:

var xmlHttp = createXmlHttpRequestObject(); 

function createXmlHttpRequestObject() { 
    var xmlHttp; 
    try { 
     xmlHttp = new XMLHttpRequest(); 
    } catch(e) { 
     var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0", 
          "MSXML2.XMLHTTP.5.0", 
          "MSXML2.XMLHTTP.4.0", 
          "MSXML2.XMLHTTP.3.0", 
          "MSXML2.XMLHTTP", 
          "Microsoft.XMLHTTP"); 
     for(var i = 0; i < XmlHttpVersions.length && !xmlHttp; i++) { 
      try { 
       xmlHttp = new ActiveXObject(XmlHttpVersions[i]); 
      } catch(e) {} 
     } 
    } 
    if (!xmlHttp) alert("Error creating XmlHttpRequest object."); 
    else { return xmlHttp; } 
} 

function initialize_main() { 
    if (xmlHttp) { 
     try { 

      xmlHttp.open("GET", "main_php.php", true); 
      xmlHttp.onreadystatechange = handleMainStateChange; //call a function when the state changes 
      xmlHttp.send(null); 
     } catch(e) { 
      alert("Can't connect to server: " + e.toString()); 
     } 
    } 
} 

function handleMainStateChange() { 
    if (xmlHttp.readyState==4) { 
     if (xmlHttp.status==200) { 
      try { 
       init_main(); 
      } catch(e) { 
       alert("Error reading the response: " + e.toString()); 
      } 
     } else { 
      alert("There was a problem retrieving data: " + xmlHttp.statusText); 
     } 
    } 
} 

function init_main() { 

var data = JSON.parse(xmlHttp.responseText); 

//now do stuff with the DOM or w/e 

} 

因此,正如我所说的一切是在Firefox和Chrome凉爽。但Internet Explorer告诉我:“读取响应时出错:TypeError:Object不支持此属性或方法”。您可能会猜到我对AJAX有点新鲜感,所以感谢您的帮助!

+1

我会建议使用[jquery](http://jquery.com/)。 – Tapos 2011-05-23 03:05:49

+0

I second Tapos;重新发明轮子(尤其是涉及Javascript的地方,那里存在如此多的跨浏览器不兼容)是疯狂的。使用任何库来做到这一点,但不要推出自己的。 – 2011-05-23 03:08:29

回答

2

我会强烈建议您使用JQuery,这样就可以编写不关心浏览器的类型使用Javascript(jQuery也这对你):http://jquery.com/

+0

噢,感谢您的推荐,我当然会为我的下一个项目,但我想变得肮脏,因为这是我第一次接触到JavaScript。不幸的是,大约有10k行代码以这种方式编写,我认为这些代码不会在jquery中重写......所以我坚持使用IE浏览器工作(并且有点想搞清楚)。 – JDS 2011-05-23 03:15:19

0

尝试使用此功能时,对我来说这适用于所有浏览器

function getXMLHTTP() 
{ 
    var xmlhttp = false; 
    try 
    { 
     xmlhttp = new XMLHttpRequest(); 
    } 
    catch(e) 
    { 
     try 
     { 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     catch(e) 
     { 
      try 
      { 
       xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch(e1) 
      { 
       xmlhttp = false; 
      } 
     } 
    } 
    return xmlhttp; 
} 
+0

嗯,这很奇怪,因为我认为我的版本尝试了两种ActiveXObject组合,你尝试(再加上几个),但没有一个似乎适用于IE。在我最初的循环中有没有什么愚蠢的做法/失踪? – JDS 2011-05-23 03:30:25

相关问题