Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обновляется страница в AJAX
 
 автор: Mefisto84   (17.06.2009 в 16:08)   письмо автору
1.7 Кб
 
 

Здравствуйте!
Я недавно начал изучать AJAX, до этого был опыт лишь в PHP. И вот почти сразу появилась пролема, которую я сам решить не могу: у меня почему то обновляется страница, которая этого делать не должна, т.е. она перезагружается. В приложении файл, который у меня называется select.js.
Есть файл index.php, в котором есть селект, при выборе селекта, вызываеся функция из файла select.js которая создает новый селект и добавляет его на стрницу index.php ниже исходного селекта. Это все работает, функция selectSrok.
Затем я добавил еще одну функцию calculate, которая просто выводит ниже этих селектов то, что было в них выбрано. И вот тут возникла эта проблема. То есть: выбираешь из первого селекта значение, появляется второй селект. Затем выбираешь из второго селекта значение, ниже выводится то, что было в них выбрано, буквально на секунду и бац, страница перезагружается и ничего нет, кроме самого первого селекта. То еть все возвращается на исходную позицию.
Как быть не знаю? Что делать?
Заранее спасибо.
P/S если надо то выложу остальные файлы.

  Ответить  
 
 автор: Zeper   (17.06.2009 в 16:39)   письмо автору
 
   для: Mefisto84   (17.06.2009 в 16:08)
 

Файла select.js не достаточно, код calculator.php нужен и ,наверное, index.php. А вобще, возможно, я знаю в чем проблема, в функции calculate переименуйте xmlhttp на что-нибудь другое. К примеру:

function calculate()
{
xmlhttp2=createXmlHttpRequestObject();
if (xmlhttp2==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var deposit = document.form1.deposit.value;    
var srok = document.form1.srok.value;    
var summa = document.form1.summa.value;    

var param = "deposit=" + deposit + "&srok=" + srok + "&summa=" + summa;

var url="calculator.php";
url=url+"?"+param;

xmlhttp2.onreadystatechange=stateChangedCalc;
xmlhttp2.open("GET",url,true);
xmlhttp2.send(null);
}


Но не уверен, что сработает. Если нет - нужны другие файлы..

  Ответить  
 
 автор: Mefisto84   (18.06.2009 в 02:19)   письмо автору
 
   для: Zeper   (17.06.2009 в 16:39)
 

Увы, не помогло. Выкладываю остальные файлы.
Они небольшие:

index.php - в этом файле селект формируется из бд

<?
@require_once("../config.php");
?>
<html>
<head>
<script type="text/javascript" src="select.js"></script>
</head>
<body>

<form name="form1" method="POST">
      <?
      $qry
="SELECT id, nazv FROM deposits ORDER by id ASC";
      
$rez mysql_query($qry);
      
$num_rez mysql_num_rows($rez);
      echo 
"<select name='deposit' id='deposit' onchange='selectSrok(this.value)'\">";
      echo 
"<option value='none'>Выберите тип вклада";
      
$i=0
      WHILE (
$i $num_rez){ 
      
$roz=mysql_fetch_array($rez);
      echo 
"<option value='".$roz['id']."'>".$roz['nazv']."";
      
$i++;
                           }
      echo 
"</select>";
      
?>

<div id="txtHint"></div>

<div id="result"></div>
</form>
<br />

</body>
</html> 


calculator.php - тут вообще все просто

<?php
echo $_GET['deposit'];
echo 
"<br>";
echo 
$_GET['srok'];
echo 
"<br>";
echo 
$_GET['summa'];
?> 


и на сякий случай файл select_srok.php, здесь формируется селект средствами АЯКСа, так же добавляется текстовое поле и кнопка.

<?php
@require_once("../config.php");
$q=$_GET["q"];

$srok_names["1"]="1 month";
$srok_names["2"]="2 months";
$srok_names["3"]="3 months";
$srok_names["4"]="4 months";
$srok_names["5"]="5 months";
$srok_names["6"]="6 months";
$srok_names["7"]="7 months";
$srok_names["8"]="8 months";
$srok_names["9"]="9 months";
$srok_names["10"]="10 months";
$srok_names["11"]="11 months";
$srok_names["12"]="1 year";
$srok_names["18"]="1.5 years";
$srok_names["24"]="2 years";
$srok_names["36"]="3 years";

$sql="SELECT id, srok FROM deposits_percent WHERE id_deposit='$q'";

$result mysql_query($sql);

echo 
"<select name=\"srok\">";
while(
$row mysql_fetch_array($result))
  {

   echo 
"<option value=".$row['id'].">".$srok_names[$row['srok']]."</option>";

  }

echo 
"</select>";
?>

<br>
<input type="text" name="summa">
<br>
<input type="submit" value="ok" onclick='calculate()'>
<?
mysql_close
();
?>

  Ответить  
 
 автор: Zeper   (18.06.2009 в 09:50)   письмо автору
 
   для: Mefisto84   (18.06.2009 в 02:19)
 

В файле select_srok.php
<input type="submit" value="ok" onclick='calculate()'> 

submit?? Ваша кнопка отправляет данные, поэтому пока выполняется calculate(); вы видите страничку, а далее идет отправка данных. Поскольку у вас в форме не указан атрибут action, то страничка перегружается. Сделайте так:
<input type="button" value="ok" onclick='calculate()'> 

  Ответить  
 
 автор: dyadya   (18.06.2009 в 10:05)   письмо автору
 
   для: Zeper   (17.06.2009 в 16:39)
 

>Файла select.js не достаточно, код calculator.php нужен и ,наверное, index.php. А вобще, возможно, я знаю в чем проблема, в функции calculate переименуйте xmlhttp на что-нибудь другое. К примеру:
>

>function calculate()
>{
>xmlhttp2=createXmlHttpRequestObject();
>if (xmlhttp2==null)
>{
>alert ("Browser does not support HTTP Request");
>return;
>}
>var deposit = document.form1.deposit.value;    
>var srok = document.form1.srok.value;    
>var summa = document.form1.summa.value;    
>
>var param = "deposit=" + deposit + "&srok=" + srok + "&summa=" + summa;
>
>var url="calculator.php";
>url=url+"?"+param;
>
>xmlhttp2.onreadystatechange=stateChangedCalc;
>xmlhttp2.open("GET",url,true);
>xmlhttp2.send(null);
>}
>

>
>Но не уверен, что сработает. Если нет - нужны другие файлы..

Тогда надо переименовать и в function stateChangedCalc()


if (xmlhttp2.readyState==4)
{
document.getElementById("result").innerHTML=xmlhttp2.responseText;


А, вообще, мне кажется, не стоит выносить функции stateChangedCalc() и stateChanged()
из обработчиков запроса. Тогда и переименовывать ничего не нужно будет...
Ещё я бы добавил проверку if(xmlhttp.status == 200)

  Ответить  
 
 автор: dyadya   (18.06.2009 в 10:18)   письмо автору
 
   для: dyadya   (18.06.2009 в 10:05)
 

Ссори, очепятка...

  Ответить  
 
 автор: Mefisto84   (18.06.2009 в 10:30)   письмо автору
 
   для: dyadya   (18.06.2009 в 10:05)
 

Всем большое спасибо, помогли. Сделал все как Вы сказали, submit заменил; xmlhhtp2 сделал, и все заработало именно так как я себе это и представлял! Еще раз большо спасибо за такую быструю помощь в решении проблемы! Удачи! :-))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования