簡體   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