|
|
|
| Здравствуйте!
На форме есть элемент select с 3 вариантами значений, кнопка, при нажатии на которую отправляется запрос на выполнение процедуры в MySQL по обновлению записи в таблице и возвращающему набор записей из обновляемой таблицы.
Принцип работы следующий. Выбираю значение в select, нажимаю кнопку на update, должен полуить получить эту же таблицу с выбранным значением.
Проблема состоит в следующем.
Выбирая каждый раз новое значение в select и нажимая кнопку все получается как надо. Если же тут же выбрать (4 раз) повторно любое из уже выбираемых ранее значений, обновление в таблице перестает происходить.
Если перезапустить IE, то все работает успешно, пока выбираю новое значение.
В чем проблема? Что происходит? | |
|
|
|
|
|
|
|
для: kuf
(09.03.2009 в 07:39)
| | Код показать не хотите? | |
|
|
|
|
|
|
|
для: Саня
(09.03.2009 в 10:08)
| | Элементы формы
<p id="division">
<? division(1,'',0,'','','','','s'); ?>
</p>
<form id="Spis_division" name="Spis_division" enctype="multipart/form-data">
<table name='new_division' border='0' cellspacing='1' cellpadding='1' class='sort'>
<tr><td colspan=8 align='left'>Новое отделение</td></tr>
<tr>
<td><input type='Text' name='new_division_id' id='div_division_id_0' value='' disabled="disabled"></td>
<td><input type='Text' name='new_division' id='div_division_0' value=''></td>
<td><input type='Text' name='new_index' id='div_index_0' value=''></td>
<td><input type='Text' name='new_town' id='div_town_0' value=''></td>
<td><select id='div_tipstreet_0'><option value='ул.'>ул.</option>
<option value='м/р.'>м/р.</option>
<option value='б/р.'>б/р.</option></select></td>
<td><input type='Text' name='new_street' id='div_street_0' value=''></td>
<td><input type='Text' name='new_home' id='div_home_0' value=''></td>
<td><input id="div_submit_0" type= 'submit' name='submit' onClick='javascript: Change_division();' value='Добавить'></td>
</tr>
</table>
</form>
|
Процедура
CREATE DEFINER=`root`@`localhost` PROCEDURE `division`(
IN div_id INT,
IN div_division VARCHAR(255),
IN div_index INT,
IN div_town VARCHAR(45),
IN div_tipstreet VARCHAR(5),
IN div_street VARCHAR(255),
IN div_home VARCHAR(10),
IN div_par VARCHAR(10)
)
BEGIN
if div_par='n' then
INSERT INTO division (division, tipdiv, index_post, town, street, nh, tipstreet)
VALUES (div_division, 0, div_index, div_town, div_street, div_home, div_tipstreet);
end if;
if div_par='u' then
UPDATE division SET division=div_division, tipdiv=0, index_post=div_index, town=div_town,
tipstreet=div_tipstreet, street=div_street, nh=div_home
WHERE id=div_id;
end if;
if div_par='d' then
DELETE from division WHERE id=div_id;
end if;
SELECT * FROM division where tipdiv=0 order by id;
END
|
Обработка через ajax при нажатии кнопки
function Change_division(id,pd)
{
if (document.getElementById('div_division_id_0').value!=="")
{
var id=document.getElementById('div_division_id_0').value;
var pd="u";
alert(id);
alert(pd);
}
sendRequest('hello.php?t=Ch_div'+Param_Division(id)+'&div_par='+pd,'division', getRequest);
}
function Param_Division(id)
{
return '&div_id='+id+'&div_division='+document.getElementById('div_division_0').value+'&div_index='+document.getElementById('div_index_0').value+
'&div_town='+document.getElementById('div_town_0').value+'&div_tipstreet='+document.getElementById('div_tipstreet_0').value+
'&div_street='+document.getElementById('div_street_0').value+'&div_home='+document.getElementById('div_home_0').value;
}
|
Получение параметров в hello.php
case "Ch_div":
division($_GET['div_id'],$_GET['div_division'],$_GET['div_index'],$_GET['div_town'],$_GET['div_tipstreet'],$_GET['div_street'],$_GET['div_home'],
$_GET['div_par']);
break;
|
Функция по обработке процедуры
function division ($div_id,$div_division,$div_index,$div_town,$div_tipstreet,$div_street,$div_home,$div_par)
{
$link=mysqli_connect('localhost', 'root', 'root','zuks');
mysqli_query($link, "SET NAME character_set_results='UTF-8'");
mysqli_query($link, "SET lc_time_names = 'ru_RU'");
$query=mysqli_query($link, "CALL division ($div_id,'$div_division',$div_index,'$div_town','$div_tipstreet','$div_street','$div_home','$div_par')");
echo(mysqli_error($link) . "\r\n");
print "<table name='division' border='0' cellspacing='1' cellpadding='1' class='sort'>
<tr>
<th> </th>
<th>id</th>
<th>Отделение</th>
<th>Индекс</th>
<th>Город</th>
<th>Тип</th>
<th>Мкр. / Улица</th>
<th>Дом</th>
</tr>";
while ($myrow=mysqli_fetch_assoc($query))
{
print "<tr id='div_tr_$myrow[id]'>
<td><input id='div_radio_$myrow[id]' name='div_radio' type='radio' onClick='javascript: aler($myrow[id]);'/></td>
<td id='div_id_$myrow[id]'>$myrow[id]</td>
<td id='div_division_$myrow[id]'>$myrow[division]</td>
<td id='div_index_$myrow[id]'>$myrow[index_post]</td>
<td id='div_town_$myrow[id]'>$myrow[town]</td>
<td id='div_tipstreet_$myrow[id]'>$myrow[tipstreet]</td>
<td id='div_street_$myrow[id]'>$myrow[street]</td>
<td id='div_home_$myrow[id]'>$myrow[nh]</td>
</tr>";
}
print "</table>";
mysqli_free_result($query);
}
|
| |
|
|
|
|
|
|
|
для: kuf
(09.03.2009 в 10:26)
| | Скорее всего AJAX кеширует ответы и не отправляет запрос по новой если он уже был отправлен ранее — он просто вернёт результат предыдущего запроса. Попробуйте добавлять заголовок "no-cache" при отправке AJAX-ответа. Или добавляйте случайную переменную в сроку запроса: sendRequest('hello.php?rand='+(new Date().getTime())+'...); | |
|
|
|
|
|
|
|
для: Саня
(09.03.2009 в 10:39)
| | гениально...
попробовал с передачей доп. параметра. | |
|
|
|
|
|
|
|
для: kuf
(09.03.2009 в 07:39)
| | Браузер кэширует страницы... | |
|
|
|
|