我有一朋友做网站,用jQuery的Ajax方法从后端载入一段HTML代码然后动态插入到网页的Div元件中。这个东西太普遍了。jQuery强大的load方法可以完成这个事情。朋友的代码是这么写的:
vartab = jQuery("#dynamic_tab");
varurl = "/list_ajax/";
tab.load(url);
简单到不能再简单了。在Chrome,Firefox,Safari下运行一点问题也没有,只有IE不行,不管是IE7,IE8,还是IE9。问题的症壮是,使用IE访问那个Ajax的链接,没有问题,但是在jQuery的Ajax方法返回了“undefined”的respons对象。没有任何报错!
怎么搞也搞不定,只好Google了一下——“jQuery load IE”,一看,很多人都在问这个问题。于是开始了散弹枪编程方式。
排在第一的就是StackOverflow被浏览了33K次的这个问题:jQuery’s .load() not working in IE – but fine in Firefox,Chrome and Safari,答案没有被打勾(不靠谱),StackOverflow还有很多人问相似的问题,不过都没有答案。不管三七二十一,先试了一下,散弹枪嘛。试了半天都没有用。
然后上Google查,又看到有人说的IE缓存的问题,什么,要把cache设置成false,或是用下面的方法来解决:
vartab = jQuery("#dynamic_tab");
varfuckie = Math.random();
varurl = "/list_ajax/"+"?fuckie="+fuckie;
tab.load(url);
反正还是一样,统统不Work,几乎所有的都试了,都不Work。搞了一天的朋友恼怒道:“Microsoft应该快点倒闭吧,产品太烂了”。IE的确是太烂了。
于是我用IE9的网页调试器可以看到点了Ajax的链接后,IE对网站有http的Ajax请求,也可以看到请求返回了,但是就是不显示在我的页面上——jQuery的Ajax的responseText为undefined!
对于我这个老家伙,对jQuery也不熟,我只得开始调试jQuery的代码,想看看里面干了什么,报了什么错?调了一个小时,基本上把jQuery的Ajax的封装看懂了七七八八了,但是还是没找到为什么有问题。
于是,我只得架起原生态的Ajax,看看IE的那个Ajax的ActiveX的对象干了什么事?写了下面的代码(当年写Ajax就是这么写的,所以也不费劲,况且网上还有例程可以抄):
functionInitAjax() { varajax=false; try{ ajax =new ActiveXObject("Msxml2.XMLHTTP"); }catch (e) { try{ ajax =new ActiveXObject("Microsoft.XMLHTTP"); }catch (E) { ajax =false; } } if(!ajax && typeofXMLHttpRequest!='undefined') { ajax =new XMLHttpRequest(); } returnajax; } varajax = InitAjax(); ajax.open("GET",url,true); ajax.onreadystatechange =function() { if(ajax.readyState == 4 && ajax.status == 200) { varshow = document.getElementById("HaoChenDIV").value; show.innerHTML = ajax.responseText; } } ajax.send(null);