Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Не работает простенький Ajax-скрипт


Автор: DjoNIK 24.6.2007, 01:44
Собственно сабж
Код

<html>

<head>
  <title>777</title>
  <script type=\"text/javascript\" language=\"JavaScript\">
   function createHttpRequest()
    {
     var xmlHTTP=false;
     try
      {
       xmlHTTP = new ActiveXObject(\"Msxml2.XMLHTTP\");
      }
      catch(e)
       {
        try
         {
          xmlHTTP = new ActiveXObject(\"Microsoft.XMLHTTP\");
         }
        catch(e)
         {
          xmlHTTP = false;
         }
       }
     if( !xmlHTTP && typeof XMLHttpRequest!='undefined' )
      {
       xmlHTTP = new XMLHttpRequest();
      }
     return xmlHTTP;
    }
   function updatePage()
    {
     if(HTTPR.readystate==4)
      {
       var response = HTTPR.responseText;
       document.getElementById("city").value=response;
      }
    }
   function GetCity()
    {
     var cid;
     var HTTPR=createHttpRequest();
     cid=document.getElementById("cid").value;
     if(!cid)
      {
       alert("Пусто!!!");
       return;
      }
     var url="tmp.php?city_id="+cid;
     HTTPR.open("GET", url, true);
     HTTPR.onreadystatechange=updatePage;
     HTTPR.send(null);
    }
  </SCRIPT>
</head>

<body>
<form>
 <input type="text" name="cid" onChange="GetCity();">
 <br>
 <input type="text" name="city">
</form>

</body>

</html>


Ну и, хотя как я понимаю проблема точно не в этом, tmp.php:
Код

<?php
include("MySQL.php");

if(isset($_GET['city_id']))
 {
  $city_id=$_GET['city_id'];
  $db=new DataBase;
  $db->query("SELECT city FROM city WHERE city_id=$city_id");
  $db->nx();
  $city=$db->fn(1);
 }

?>


Так IE ругается на строчку с
Код

<input type="text" name="cid" onChange="GetCity();">

"Предпологает начличие объекта"

Автор: SelenIT 24.6.2007, 02:16
Зачем слеши перед кавычками в строках 5, 11 и 17?

Автор: DjoNIK 24.6.2007, 14:09
Цитата

Зачем слеши перед кавычками в строках 5, 11 и 17?

smile из PHP сопировал.
Скрипт хоть ошибок не выдаёт, но и не работает: 
Код

<input type="text" name="city"> 
- не заполняется

Автор: SelenIT 24.6.2007, 14:25
Так... а где в tmp.php хоть какой-нибудь вывод? Что он выдает, если запустить tmp.php?city_id=что_то в браузере напрямую?

Автор: Mymik 24.6.2007, 15:24
А у меня вообще вопрос по поводу JS...
Если посмотреть на твой код, ты пытаешься получить DOM ссылку на объекты при помощи функции document.getElementById() Но у тебя нет ни единого ID в твоем примере... у тебя только Name... А Name это для POST или GET запросов... т.е. это для отправки данных используется. А для JS используются id. Так что если ты проставишь в твои input'ы нужные тебе id, тогда все будет работать ;о)

Добавлено через 2 минуты и 57 секунд
Ну и следовательно ошибка в 42 строчке приведенного тобою кода
Код

cid=document.getElementById("cid").value;

Потому что document.getElementById("cid") возвращает null. а у null не существует прототипа value.
И дальше еще 35 строчку надо посмотреть тебе. там такая же ситуация... точнее тебе нужно просто id у html элементов выставить

Автор: DjoNIK 24.6.2007, 15:39
По поводу id спасибо.
Вот переработанный код, который работает под IE, но Opera и FF ничего не отображают:
Код

<html>

<head>
  <title>777</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <script type="text/javascript" language="JavaScript">
     var xmlHTTP=false;
     try
      {
       xmlHTTP = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch(e)
       {
        try
         {
          xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
         }
        catch(e)
         {
          xmlHTTP = false;
         }
       }
     if( !xmlHTTP && typeof XMLHttpRequest!='undefined' )
      {
       xmlHTTP = new XMLHttpRequest();
       alert("OK");
      }
     else
       alert("ERROR");

   function updatePage()
    {
     if(xmlHTTP.readystate==4)
      {
       var response = xmlHTTP.responseText;
       document.getElementById("name").value=response;
      }
    }
   function GetCity()
    {
     var cid;
     cid=document.getElementById("cid").value;
     if(!cid)
      {
       alert("ÏÓÑÒÎ!!!");
       return;
      }
     var url="tmp.php?id="+cid;
     xmlHTTP.open("GET", url, true);
     xmlHTTP.onreadystatechange=updatePage;
     xmlHTTP.send(null);
    }
  </SCRIPT>
</head>

<body>



<form>
 <input type="text" id="cid" onChange="GetCity();">
 <br>
 <input type="text" id="name">
</form>

</body>

</html>

и
Код

if(isset($_GET['id']))
 {
  $id=$_GET['id'];
  $res=mysql_query("SELECT name FROM tbl WHERE id=$id");
  $row=mysql_result($res, 0);
  $name=$row;
  echo $name;
 }
else
 {
  echo "ERROR";
 }

smile

Автор: Mymik 24.6.2007, 15:51
DjoNIK, как я помню, для FF и Opera send() 51 строчка, вызывается без параметров... и кажись уже и для IE тоже без параметров вызывается...

Автор: DjoNIK 24.6.2007, 16:00
Цитата

как я помню, для FF и Opera send() 51 строчка, вызывается без параметров

Оно-то может и так, но не заработало :(

Автор: Mymik 24.6.2007, 16:20
DjoNIK, 33 строчка 
Код

if(xmlHTTP.readyState == 4)

readyState 
Теперь работает везде

Автор: DjoNIK 24.6.2007, 16:30
СПАСИБО!!!
Opera заработала сразу,а  FF с xmlHTTP.send() - не заработало, но вот с xmlHTTP.send(null) всё OK.
Mymik у тебя зоркий глаз и завидная внимательность  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)