的JavaScript / AJAX在Opera不工作,在FF / IE / Chrome的完美(J

2019-09-21 13:42发布

目前,我有此Javascript在getresults.js文件命名为:

function getItems(str)
{
if (str=="")
  {
  document.getElementById("getItems").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("getItems").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","/include/retrieveitems.php?q="+str,true);
xmlhttp.send();
}

它是由本次活动呼吁:

onclick="getItems('all')"

它完美的作品在Firefox,IE,Chrome的..但歌剧院拒绝工作。 我的访问者中只有很小一部分是Opera用户,但仍..我宁愿有它的工作。 一个活生生的URL可以在这里找到: http://tf2g.com/gallery

如果有人可以帮助,非常感谢!

Answer 1:

失败的原因是,该事件处理函数不是调用你的getItems()方法在所有。 它看到document.getItems从Opera的微观数据支持()方法 ( http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html ),并调用来代替。 这是JavaScript的范围的问题:这两个元素本身和它的文档是在范围,所以这里定义的方法/属性就可以隐藏你在全球范围内界定方法/属性。

高兴的是,歌剧实现微观数据早,所以你注意到了这一点:)

最简单的解决方法是重命名功能,避免名称冲突与微观数据。 您还可以使用的addEventListener(),而不是写的onclick =“”的标记 - 如果你做了功能的范围是它在创建范围,这样你就不会遇到这样的陷阱。

window.addEventListener('load', function(){
  for( var i=0,l;l=document.links[i]; i++ )if( l.hash){
    l.addEventListener( 'click', function(){
      getItems(this.hash.substr(1));
    }, false);
  }
}, false);


Answer 2:

我调试你的链接了一下,发现有与AJAX请求没有问题。 事实上,有一个在jquery.min.js文件未处理的异常,防止其他JavaScript代码运行。

我的步骤做:我打开Opera蜻蜓(按Ctrl + Shift + I),这是萤火虫像我并刷新页面。 我在插入断点“getItems()”,看到的代码没有到达那里。 通过蜻蜓控制台我写的“getItems(‘所有’);” 和阿贾克斯就如预期。



文章来源: Javascript/AJAX not working in Opera, works perfect in FF/IE/Chrome