Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ajax-голосовалка. В IE работает не правильно 
:(
    Опции темы
AJIeKceu_D
Дата 10.6.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.11.2006

Репутация: нет
Всего: нет



Здравствуйте,
Захотел написать голосовалку на Ajax. Написал половину оттестил в фаерфоксе - все работает как должно. Начал тестить в IE, а в нем первый раз все отрабатывает правильно, а при попытке еще раз проголовать возвращаемая xml-ка 1 в 1 как в первый раз. В фаерфоксе могу голосовать сколько угодно.



Вобщем я разобрался с проблемой. Проблема решается запретом кеширования страницы браузеру. Делается это добавлением
Код

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache'); 


Это сообщение отредактировал(а) AJIeKceu_D - 12.6.2008, 10:49
PM MAIL   Вверх
IDVsbruck
Дата 10.6.2008, 12:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 7
Всего: 22



Пост не по теме. Пиши в передачу "Битва экстрасенсов".
PM MAIL   Вверх
AJIeKceu_D
Дата 10.6.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.11.2006

Репутация: нет
Всего: нет



IDVsbruck, ))
Сори, я просто решил, что это проблемы гденибудь в кеше IE или еще в какойто такой его особенности, которая к коду не должна относится, потому что в Firefox вобще все хорошо, а IE в первый раз отрабатывает, а потом возвращает всю туже xml-ку, что в первый раз. 
Вот начальный файл:
Код

<table style="width:220px;">
<tr>
    <td width="50px"><div id="redstar"><table><tr>
        <td><img src="/vote/starred.gif" width="10" height="10" onmouseover="this.src='/vote/starred2.gif'; document.getElementById('voice').innerHTML='-5';" onmouseout="this.src='/vote/starred.gif'; document.getElementById('voice').innerHTML=preVoice;" onclick="voitfunc(-5, '<?= $table?>', '<?= $_GET["id"]?>', '<?=$_SESSION["user_name"]?>');" /></td>
        <td><img src="/vote/starred.gif" width="10" height="10" onmouseover="this.src='/vote/starred2.gif'; document.getElementById('voice').innerHTML='-4';" onmouseout="this.src='/vote/starred.gif'; document.getElementById('voice').innerHTML=preVoice;" /></td>
        <td><img src="/vote/starred.gif" width="10" height="10" onmouseover="this.src='/vote/starred2.gif'; document.getElementById('voice').innerHTML='-3';" onmouseout="this.src='/vote/starred.gif'; document.getElementById('voice').innerHTML=preVoice;" /></td>
        <td><img src="/vote/starred.gif" width="10" height="10" onmouseover="this.src='/vote/starred2.gif'; document.getElementById('voice').innerHTML='-2';" onmouseout="this.src='/vote/starred.gif'; document.getElementById('voice').innerHTML=preVoice;" /></td>
        <td><img src="/vote/starred.gif" width="10" height="10" onmouseover="this.src='/vote/starred2.gif'; document.getElementById('voice').innerHTML='-1';" onmouseout="this.src='/vote/starred.gif'; document.getElementById('voice').innerHTML=preVoice;" /></td></tr></table>
    </div></td>
    <td style="width:50px;"><div id="voice" class=story align="center"></div></td>
    <td width="50px"><div id="greenstar"><table><tr>
        <td><img src="/vote/star.gif" width="10" height="10" onmouseover="this.src='/vote/star2.gif'; document.getElementById('voice').innerHTML='+1';" onmouseout="this.src='/vote/star.gif'; document.getElementById('voice').innerHTML=preVoice;" /></td>
        <td><img src="/vote/star.gif" width="10" height="10" onmouseover="this.src='/vote/star2.gif'; document.getElementById('voice').innerHTML='+2';" onmouseout="this.src='/vote/star.gif'; document.getElementById('voice').innerHTML=preVoice;" /></td>
        <td><img src="/vote/star.gif" width="10" height="10" onmouseover="this.src='/vote/star2.gif'; document.getElementById('voice').innerHTML='+3';" onmouseout="this.src='/vote/star.gif'; document.getElementById('voice').innerHTML=preVoice;" /></td>
        <td><img src="/vote/star.gif" width="10" height="10" onmouseover="this.src='/vote/star2.gif'; document.getElementById('voice').innerHTML='+4';" onmouseout="this.src='/vote/star.gif'; document.getElementById('voice').innerHTML=preVoice;" /></td>
        <td><img src="/vote/star.gif" width="10" height="10" onmouseover="this.src='/vote/star2.gif'; document.getElementById('voice').innerHTML='+5';" onmouseout="this.src='/vote/star.gif'; document.getElementById('voice').innerHTML=preVoice;" /></td></tr></table>
    </div></td>
    </tr>
</table>
<div id="mess"></div>
<script>
var preVoice=document.getElementById('voice').innerHTML;
</script>


Вот JS:
Код

var xmlHttp = createXmlHttpRequestObject();

function createXmlHttpRequestObject() {
    var xmlHttp;
    if (window.ActiveXObject) {
        try {
            return new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {
            return false;
        }
    }
    else {
        try {
            return new XMLHttpRequest();
        }
        catch (e) {
            return false;
        }
    }
    if(!xmlHttp)
        alert("Ошибка создания объекста XMLHttpRequest");
    return false;
}

function voitfunc(ball, table, trick_id, session_user_name) {
    // Продолжать если xmlHttp не пустая строчка
    if (xmlHttp) {
        // Попытаться установить соедиенение с сервером
        try {
            if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
//                name = encodeURIComponent(document.getElementById("myName").value);
                xmlHttp.open("GET", "/vote/votexml.php?ball="+ball+"&table="+table+"&id="+trick_id+"&sun="+session_user_name, true);
//                document.getElementById("divMessage").innerHTML ="vote/votexml.php?ball="+ball+"&table="+table+"&id="+trick_id;
                xmlHttp.onreadystatechange = handleServerResponse;
//                alert("/vote/votexml.php?ball="+ball+"&table="+table+"&id="+trick_id+"&sun="+session_user_name);
                xmlHttp.send(null);
            }
            else {
                setTimeout('voitfunc(ball, table, trick_id, session_user_name)', 1000);
            }
        }
        catch (e) {
            alert("Не удалось установить соединение с сервером: "+e);
        }
    }
}

function handleServerResponse() {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            var xmlResponse = xmlHttp.responseXML;
            xmlDocumentElement = xmlResponse.documentElement;
            currentRatio = xmlDocumentElement.getElementsByTagName("ratio").item(0).firstChild.data;
            document.getElementById("voice").innerHTML = currentRatio;
            alert(xmlHttp.responseText);
            document.getElementById("mess").innerHTML=xmlDocumentElement.getElementsByTagName("base").item(0).firstChild.data;
            preVoice=currentRatio;
        }
        else {
            alert("При обращении к серверу возникли проблемы: "+xmlHttp.statusText);
        }
    }
}


И php который возвращает xml:
Код

<?php
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
echo "<response>";
include_once("../conf.inc.php");
include_once("../class_sql.php");
$sql = new sql();
$sql->server = $mysqladress;
$sql->login = $user_name;
$sql->pass = $user_pass;
$sql->db = $db_name;
$result_ratio_select=0;

require_once("../class_controlpanel.php");
$obj_ctrlp = new control_panel();
require_once("../class_filemgr.php");
$obj_filemgr = new filemgr;
$table=$_GET["table"];

if($sql->connect() == -1){
    $err = 'init: \$sql->connect() returns -1';
}
if($sql->select_db() == -1){
    $err = 'init: \$sql->select_db() returns -1';
}
if ($_GET["sun"]) {
//    echo "<ratio>".$_GET["id"]."</ratio>";
    $result_ratio_select = $obj_filemgr->select_file_info($table, $_GET["id"], "ratio");
    $array[0]["key"] = "ratio";
    $array[0]["value"] = $obj_filemgr->select_file_info($table, $_GET["id"], "ratio") + $_GET["ball"];
    if (($sql->update($table, $array, " WHERE (id='".$_GET["id"]."')")) != -1) {
        echo "<ratio>".$obj_filemgr->select_file_info($table, $_GET["id"], "ratio")."</ratio>";
        echo "<base>".$result_ratio_select."</base>";
    }
    else {
        echo "<ratio>Err</ratio>";
    }
}
echo "</response>";
?>


Это сообщение отредактировал(а) AJIeKceu_D - 10.6.2008, 18:00
PM MAIL   Вверх
AJIeKceu_D
Дата 12.6.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.11.2006

Репутация: нет
Всего: нет



Вобщем я разобрался с проблемой. Проблема решается запретом кеширования страницы браузеру. Делается это добавлением
Код

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache'); 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.