2009-11-07 102 views
0

我已經編寫了一個AJAX腳本來讀取數據庫中的信息並將其作爲HTML注入.php文件。它適用於IE8,Safari,Chrome而不是Firefox。沒有顯示錯誤或任何錯誤,它根本不會執行。AJAX腳本不能在Firefox中工作

下面的代碼:

function queryDatabase(query) 
{ 
    alert(); 
    var xmlhttp; 
    if (window.XMLHttpRequest) 
     { 
     alert(); 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
     } 
    else 
     { 
     alert(); 
     // code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    xmlhttp.onreadystatechange=function() 
     { 
     if(xmlhttp.readyState==4) 
      { 
      content.innerHTML = xmlhttp.responseText; 
      } 
     else 
      { 
      content.innerHTML = "<center><span style=\"color: #ff7e00; font-size: 30px;\">LOADING...</div></center>"; 
      } 
     } 
     xmlhttp.open("GET",query,true); 
     xmlhttp.send(null); 
} 

(警報是出於測試目的,但他們沒有在Firefox中顯示)

這裏的div它的使用:

<div onClick="queryDatabase('latestquery.php')" style="cursor: pointer;">TEST</div> <div onClick="queryDatabase('testtagquery.php')" style="cursor: pointer;">TEST</div> 

任何幫助表示讚賞:)
謝謝
山姆

+0

只是一個有幫助的註釋:我建議你去看看的jQuery(http://jquery.com) 。它可以幫助您避免所有瀏覽器特定的痛苦等等。 – BalusC 2009-11-07 20:45:38

+0

如果您在'if(xmlhttp.readyState == 4){}'條件中添加了警報,您會看到它嗎?如果這樣做,結果顯示可能會出現問題,而不是提取結果。 – nickd 2009-11-07 21:10:14

回答

2

好吧,一開始你不能在Firefox中做alert() - 參數不是可選的。將其更改爲alert(0)並查看會發生什麼。

其次,我沒有看到你在哪裏設置content - 你是否已經初始化了某個全局變量?

您可以通過打開錯誤控制檯(工具 - >錯誤控制檯或Ctrl + Shift + J)來檢查Firefox中的腳本錯誤。 要想獲得更多幫助,請安裝firebug

編輯:如果content是你需要做的document.getElementById(content).innerHTML = ...;

+0

內容是HTML文件中div的標識。 div是空的。感謝有關alert()的信息。在Firefox中,腳本似乎運行,但它仍然沒有預期的結果:/ 正如我所說,它可以在其他瀏覽器中完美運行。 – Samwhoo 2009-11-07 20:45:40

+0

+1 - 在Firefox上,使用螢火蟲顯示錯誤是唯一真正的解決方案。 – 2009-11-07 20:46:57

+0

我剛試過這個在螢火蟲,並刪除所有警報修復它。刪除警報。 – Tim 2009-11-07 20:49:17

1

我可以給你是開始使用實現AJAX功能爲你的JavaScript框架的最好的建議元素的僅僅是ID,並使其更容易使用它來編寫代碼。

使用jQuery,這將是這樣的:

<script type="text/javascript" 
     src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"> 
</script> 
<script type="text/javascript"> 
$(function() { 
    $('#div1').click(function() { 
     queryDb(this,'lastestquery.php'); 
    }); 

    $('#div2').click(function() { 
     queryDb(this,'testtagquery.php'); 
    }); 
}); 

function queryDB(div,url) { 
    $(div).load(url); 
} 
</script> 

<div id="div1" style="cursor: pointer;">TEST</div> 
<div id="div2" style="cursor: pointer;">TEST</div> 

注意,我可能還使用了CSS類來分配光標也是如此。

<div id="div1" class="clickable">TEST</div> 

通過CSS文件

.clickable { 
    cursor: pointer; 
} 
+0

試過了,它似乎沒有想要的結果...我假設這只是從數據庫中獲取數據,並沒有實際顯示它? – Samwhoo 2009-11-07 20:59:38

+0

jQuery很棒,但它會幫助你,如果你知道幕後發生了什麼 – Greg 2009-11-07 21:04:11

+0

@Samwhoo - 它假定你的php代碼返回HTML並用它替換DIV的內容。它怎麼樣似乎沒有工作? – tvanfosson 2009-11-07 21:37:02

0

編輯加載:這個工作在它的面前,但它看起來像現在它不是實際的解決方案。

以上代碼並將xmlhttp.open調用移到設置狀態更改函數之前爲我工作。就像這樣:

xmlhttp.open("GET",query,true); 
xmlhttp.onreadystatechange=function() 
{ 
if(xmlhttp.readyState==4) 
{ 
    content.innerHTML = xmlhttp.responseText; 
} 
else 
{ 
    content.innerHTML = ".."; 
} 
} 
xmlhttp.send(null); 
+0

試過這個,它沒有工作:/ – Samwhoo 2009-11-07 21:00:20

0

這裏的lastquery.php文件,如果這能幫助:

<?php 
      $con = mysql_connect("localhost","root","***"); 
      mysql_select_db("main", $con); 

      //GET MOST RECENT POST ID 
      $last_id_query = mysql_query("SELECT * FROM articles"); 
      $last_id_result = mysql_fetch_array($last_id_query); 
      $last_id = (int)$last_id_result['id'] - 2; 

      //USE MOST RECENT POST ID TO GENERATE LAST 5 ARTICLES SUBMITTED 
      $result = mysql_query("SELECT * FROM articles WHERE id > '$last_id' ORDER BY id DESC"); 

      while($row = mysql_fetch_array($result)) 
       { 
       echo "<div id=\"centralcontent\"><div class=\"articleheading\"><strong>".$row['title']."</strong></div><div class=\"tag\">&nbsp; &nbsp; in ".$row['tag']."</div><div class=\"articleinfo\">".$row['date']."</div>"; 
       echo "<div class=\"articlecontent\">".$row['content']."</div></div>"; 
       } 

      mysql_close($con); 
      ?>