Сообщение об ошибке: объект не найден!по вызову PHP-скрипта в AJAX - PullRequest
1 голос
/ 08 декабря 2010

Я создал очень простую страницу, которая извлекает все контакты из моей таблицы contact MySQL, используя AJAX:

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

localhost
12/08/2010 14:47:27
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

Я обнаружил, что добавление & SID = является корнем проблемы.Это происходит в файле PrintContacts.js.Удаление этого загружает страницу соответственно.Но мне DO это нужно, чтобы обойти кеширование.Вы знаете, как решить эту проблему?

Спасибо за помощь.

Решение

При добавлении SID к URL-адресу (для целей кэширования) к нему следует добавить «? Sid =» вместо «& sid =».Изменение этого решает проблему;В конце концов, это была опечатка!

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

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

Ответы [ 3 ]

1 голос
/ 08 декабря 2010

При использовании AJAX, URL должен быть связан на основе текущего местоположения браузера, а не расположения файла javascript.

Измените URL в printContacts () на просто «PHP / getAllContacts.php».

РЕДАКТИРОВАТЬ: Хорошо ... Я понял это!В PrintContacts.js вам нужно изменить эту строку

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

на эту ...

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

Обратите внимание на знак вопроса там.Имея & заставил его искать файл с именем getAllContacts.php & 192837, а не файл с именем getAllContacts.php.

0 голосов
/ 08 декабря 2010

Я предполагаю, что ваша ошибка лежит здесь:

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

Замените URL либо абсолютным, либо чем-то, относящимся к домену, а не относящимся к файлу JS.

0 голосов
/ 08 декабря 2010

Я собираюсь предложить только одну вещь

Можете ли вы использовать полный URL вместо

 var url = "http://www.blahblah.com/PHP/getAllContacts.php";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...