错误消息:找不到对象!在AJAX中调用PHP脚本

时间:2010-12-08 14:32:56

标签: php javascript ajax

我创建了一个非常基本的页面,使用AJAX从我的contact MySQL表中检索所有联系人:

的index.php

html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>mycontacts.</title>
    <script type="text/javascript" src="JavaScripts/PrintContacts.js"></script>
  </head>

  <body>
    <div class="main-wrapper">
      <div id="main-content">

        <script type="text/javascript">
          printContacts();
        </script>

        <div id="contacts">
        </div>

      </div>
    </div>
  </body>
</html>

PrintContacts.js

var xmlHttp;

function printContacts() {
  xmlHttp = new XMLHttpRequest();
  var url = "PHP/getAllContacts.php";

  // Workaround for page caching
  url = url + "&sid=" + Math.round(Math.random() * 1000000000);
  // Commenting the line above removes my issue but I do need this for caching!!!

  // Manage XmlHttpObject state change
  xmlHttp.onreadystatechange = stateChanged;

  xmlHttp.open("POST", url, true);
  xmlHttp.send(null);
}

function stateChanged() {
  // Check if the XmlHttp request is complete
  if (xmlHttp.readyState == 4) {
    // Set the XmlHttp response in the div contacts
    document.getElementById("contacts").innerHTML = xmlHttp.responseText;
  }   
}

getAllContacts.php

<?php
$dbconnection = mysql_connect("localhost", "root", "");
mysql_select_db("mycontacts", $dbconnection);

$command = "SELECT * FROM contact";
$result = mysql_query($command);

echo "<table border='1'>";

// Table headers
echo "<tr><th>Name</th></tr>";

// Print all contacts
while($row = mysql_fetch_array($result)) {
  echo "<tr>";
  echo "<td>" . $row['DisplayName'] . "</td>";
  echo "</tr>";
}

echo "</table>";

mysql_close($dbconnection);
?>

打开getAllContacts.php直接返回包含数据的相应表,但是,打开index.php会导致错误:

  

找不到对象!

     

在此服务器上找不到请求的URL。 引荐页面上的链接似乎有误或过时。请告知该页面的作者有关错误的信息   如果您认为这是服务器错误,请与网站管理员联系。

     

错误404

     

本地主机
   12/08/2010 2:47:27 PM
  Apache / 2.2.14(Win32)DAV / 2 mod_ssl / 2.2.14 OpenSSL / 0.9.8l mod_autoindex_color PHP / 5.3.1 mod_apreq2-20090110 / 2.7.1 mod_perl / 2.0.4 Perl / v5.10.1

我发现添加&amp; SID =是问题的根源。这发生在PrintContacts.js文件中。删除它会适当地加载页面。但我 DO 需要这样才能解决缓存问题。你知道怎么解决这个问题吗?

感谢所有帮助。

解决方案

将SID添加到url(用于缓存目的)时,应该附加“?sid =”而不是“&amp; sid =”。改变这个解决了这个问题;毕竟这是一个错字!

function printContacts() {
  xmlHttp = new XMLHttpRequest();
  var url = "PHP/getAllContacts.php";

  // Workaround for page caching
  url = url + "&sid=" + Math.round(Math.random() * 1000000000);
  ...

3 个答案:

答案 0 :(得分:1)

使用AJAX时,网址应根据浏览器的当前位置进行链接,而不是javascript文件的位置。

将printContacts()中的url更改为“PHP / getAllContacts.php”。

编辑:好的......我明白了!在PrintContacts.js中,您需要更改此行

url = url + "&sid=" + Math.round(Math.random() * 1000000000);

到此......

url = url + "?sid=" + Math.round(Math.random() * 1000000000);

请注意那里的问号。拥有&amp;让它找到一个名为getAllContacts.php&amp; 192837的文件,而不是名为getAllContacts.php的文件。

答案 1 :(得分:0)

我只建议一件事

请您使用完整的网址

 var url = "http://www.blahblah.com/PHP/getAllContacts.php";

答案 2 :(得分:0)

我的猜测是你的错误在于:

var url = "../PHP/getAllContacts.php";

将url替换为绝对url或相对于域而不是相对于JS文件的内容。