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


Автор: Самозванка 12.10.2007, 12:52
не срабатывает отклик при выборе другого селекта.
Код

Поиск по параметру: 
    <select name="tip" onChange="doLoad(this.value);">
     <option value="all"  selected > Все 
      <option value="sklad" >Склад 
      <option value="name" >Наименование 
      <option value="model" >Модель 
      <option value="date">Дата прихода 
      <option value="edizm">Единица измерения 
      <option value="kolvo">Количество 
      <option value="price">Цена 
    </select>        
  <div id="txtHint"></div>

Код

function doLoad(url1)
{ 
var url="1.php";
url=url+"?tip="+url1+"&sid=" + (new Date().getTime());
alert(url);
request.open("GET",url,true);
request.send(null);
//alert(request.readyState);
request.onreadystatechange=stateChanged(); 
}
function stateChanged() 
{ 
//alert('dfdf');
if (request.readyState==4 || request.readyState=="complete")
 { 
 document.getElementById("txtHint").innerHTML=request.responseText;
 } 
} 

Код

<?php 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 
header("Content-type: text/plain; charset=windows-1251");
$dbuser = "DBA";
$dbpasswd = "SQL";
$dbname= $_COOKIE['dbname'];
$conn=odbc_connect($dbname , $dbuser , $dbpasswd );
$tip=$_GET["tip"];
setcookie("tip", $tip, time() + 3600*24);
//выбор значения СКЛАД
if ($tip=="sklad")
{
$a="Выберите склад:";
echo $a;
echo "<select name='select3' onChange=\"doLoad3(this.value);\"> ";
$resultsel =  odbc_exec( $conn, "select stockname from ipr_birja" );
for ($i=0, $size=odbc_num_rows($resultsel); $i<$size; $i++)
{ 
$f=odbc_fetch_array($resultsel,$i+1);
$v=odbc_fetch_array($resultsel, $i+2);
$b=$f['stockname'];
$c= $v['stockname'];
if ($b==$c)
{
continue;
}
else  echo "<option value=\"".$b."\">" .$b. "</option>"; 
} 
echo "</select>";
};

и так далее другие значения селектов....


Раньше когда у меня кэш в браузере(IE) был забит целиком, всё работала нормально, так как видимо в кэш ничего не сохранялось, теперь же после очистки аякс не срабатывает, но если я раскометирываю какой нить из алертов в яваскрипте опять всё работает. В пхп пробовала различные хэдеры для запрещения кэширования не помогает, пробовала пост использовать вместо гет, ничего((( Что еще можно попробовать?

Автор: 3oxa 12.10.2007, 14:30
Есть пару идеек. 

Во первых чтобы обойти любое кеширование в конец урла кидаем мусор.  В роли мусора очень классно выступает timestamp.  Так же можно сделать "умный" мусор. То бишь чтобы при определенных параметрах он будет совпадать. Я использовал md5 от массива.

Во вторых я не много не понял что должно происходить и что происходить?! (Сорри я сторонник Мутулсов)
Приходит не правильный Response или не вызываеться функция doLoad2() ???



Автор: Самозванка 12.10.2007, 14:38
3oxa, 
1. Мусор то я делаю, и пробовала и Math.random() и как тут (new Date().getTime())ю Но не спасает....
2. Пытаюсь сделать, чтобы при выборе из селекта одной из оптион появлялся другой селект, при выборе дрйгой оптион из первого селекта инпут...
Но при выборе первого оптиона каким то образом инфа кэшируется и когда я выбираю другой оптион, все равно отображается старая инфа.... 

Автор: acdcee 12.10.2007, 19:37
Ты когда кэш очищаешь то как мне известно ты там убиваешь куку, так как у тебя название базы данных иненно так вызывается.....

Это просто по тому что я в пхп увидел, вот а вообще хз  smile 

Автор: JSman 18.10.2007, 23:01
скобки убери request.onreadystatechange=stateChanged;

Автор: astra0 21.10.2007, 04:30
Цитата(Самозванка @ 12.10.2007,  12:38)
3oxa, 
1. Мусор то я делаю, и пробовала и Math.random() и как тут (new Date().getTime())ю Но не спасает....
2. Пытаюсь сделать, чтобы при выборе из селекта одной из оптион появлялся другой селект, при выборе дрйгой оптион из первого селекта инпут...
Но при выборе первого оптиона каким то образом инфа кэшируется и когда я выбираю другой оптион, все равно отображается старая инфа....

Попробуй обновить обьект  request. скорее всего результат кэширует он где-то у себя в классе

Добавлено через 8 минут и 16 секунд
Вот нашел
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

У меня работает правильно

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