繁体   English   中英

Javascript / AJAX无法在Opera中运行,在FF / IE / Chrome中可以完美运行

[英]Javascript/AJAX not working in Opera, works perfect in FF/IE/Chrome

我目前在名为getresults.js的文件中包含以下Javascript:

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拒绝运行。 我的访问者中有一小部分是Opera用户,但仍然..我希望它能正常工作。 可以在以下网址找到实时网址: http//tf2g.com/gallery

如果有人可以提供帮助,则非常有义务!

失败的原因是事件处理程序根本没有调用getItems()方法。 从Opera的Microdata支持http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html )中看到document.getItems()方法,然后调用该方法。 这是JavaScript范围的问题:元素本身及其文档都在范围内,因此此处定义的方法/属性将能够隐藏您在全局范围内定义的方法/属性。

很高兴Opera尽早实施Microdata,所以您注意到了这一点:)

最简单的解决方法是重命名函数,以避免名称与Microdata冲突。 您也可以使用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);

我稍微调试了一下您的链接,发现AJAX请求没有问题。 实际上,jquery.min.js文件中存在未处理的异常,该异常会阻止其他javascript代码运行。

我执行的步骤:我打开了类似于Firebug的Opera DragonFly(Ctrl + Shft + I)并刷新了页面。 我在“ getItems()”中插入了断点,发现代码没有到达那里。 通过蜻蜓控制台,我写了“ getItems('all');”。 而ajax达到了预期。

Ø

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM