2009-11-07 105 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); 
      ?>