W FF dziala wszystko wyśmienicie, jednak IE chyba posiada jakiś cache, bo gdy napiszę wiadomość(czy to na IE, czy to na FF) to nie wyświetla mi jej(tylko w IE, w FF widać ją zaraz).
Wiadomości są widoczne, dopiero po ponownym uruchomieniu przeglądarki(IE), odświerzanie nic nie daje.
Skrypt działa poprawnie również w Opera
Używam IE7
Skrypt działa tak:
plik chat.json.php powinien mi zwrócić nowe wiadomości(te których ID jest większe od podanego). I gdy napiszę wiadomość w IE i próbuje manualnie zobaczyć wynik json wchodząc na plik chat.json.php?id=57&location=0 to w IE widzę pusty wynik: [], gdy odświeże go w FF to widzę: [author...............]. I teraz zdziwienie bo gdy otworzę go w IE to widzę wynik taki jak w FF? Czego to może być przyczyna? jQuery...?
Poniżej pliki związane z chatem.
chat.json.php- Odbieranie wiadomosci z bazy
<?php /*ąłśąłś*/ require_once 'inc/config.php'; require_once 'inc/jsonFunctions.php'; { } $sth = $pdo -> query('SELECT chat.id, chat.message, chat.time, chat.author AS pid, players.login FROM chat LEFT JOIN players ON players.id=chat.author WHERE chat.id>'.$id.' ORDER BY chat.id DESC LIMIT 20'); $sth -> execute(); while($row = $sth -> fetch()) { 'id' => $row['id'], 'login' => $row['login'], 'pid' => $row['pid'], 'text' => toCode($row['message']), ); } $sth -> closeCursor(); ?>
plik sendMessage.json.php- wysylanie wiadomosci
<?php /*ąłśąłś*/ require_once 'inc/config.php'; { } { } $sth = $pdo -> prepare('INSERT INTO chat(author, time, message, location) VALUES(:pid, :time, :message, :location)'); $sth -> bindValue(':pid', $_SESSION['pid']); $sth -> bindValue(':message', $text); $sth -> bindValue(':location', $location); $sth -> execute(); $sth -> closeCursor();
Plik HTML:
<div class="send_form"> <form id="sendMessage" method="post" action="json/sendMessage.json.php"> <input type="text" style="width: 400px;" name="message" id="messageText" /> <input type="submit" value="Wyślij" style="width:50px;" onclick="sendMessage(); return false;" /> </form> </div> <div class="chat"> Wczytywanie chatu... </div>
Oto kod JS:
var lastId = 0; function show(data) { var chatDiv = $('.chat').html(); var newElement = '<div class="msg"><div class="author">'+data['login']+': </div> <div class="text">'+data['text']+'</div></div>'; $('.chat').html(newElement+chatDiv); } function getMessages(id) { $.ajax({ type: 'GET', dataType: 'json', url: 'json/chat.json.php', data: { 'location': 0, 'id': id }, success: function(result) { if (id == 0) { $('.chat').html(''); } if (typeof result == 'object') { for (n in result) { show(result[n]); lastId = result[n]['id']; } } } }); } function getNew() { getMessages(lastId); } function sendMessage() { var e = $('#sendMessage'); var messageText = $('#messageText').attr('value'); $('#messageText').attr('value', ''); $.ajax({ type: e.attr('method'), url: e.attr('action'), dataType: 'json', data: { location: 0, text: messageText }, success: function (result) { if (result != 1) alert('Wiadomość nie została wysłana!'); } }) } getMessages(0); setInterval('getNew()', 1000);
Edit
Po 6 godzinach prawie znalazłem rozwiązanie. Masakra.
Rozwiązanie: w obiekcie przekazywanym do funkcji $.ajax trzeba ustawić cache: false,