Witam, napisałem chat w js z użyciem jquery. Chat kożysta z json. Przy starcie pobierane jest 20 ostatnich wiadomości, później tylko nowe.
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
  1. <?php
  2. chdir('./../');
  3. /*ąłśąłś*/
  4. require_once 'inc/config.php';
  5. require_once 'inc/jsonFunctions.php';
  6.  
  7. $id = (isset($_GET['id'])) ? intval($_GET['id']) : 0;
  8. $location = (isset($_GET['location'])) ? intval($_GET['location']) : '';
  9.  
  10. if (!is_numeric($id) || !is_numeric($location))
  11. {
  12. die('Przesłano nie poprawne informacje!');
  13. }
  14.  
  15. $messages = array();
  16.  
  17. $sth = $pdo -> query('SELECT chat.id, chat.message, chat.time, chat.author AS pid, players.login FROM chat
  18. LEFT JOIN players
  19. ON players.id=chat.author
  20. WHERE chat.id>'.$id.' ORDER BY chat.id DESC LIMIT 20');
  21.  
  22. $sth -> execute();
  23. while($row = $sth -> fetch())
  24. {
  25. $messages[] = array(
  26. 'id' => $row['id'],
  27. 'login' => $row['login'],
  28. 'pid' => $row['pid'],
  29. 'text' => toCode($row['message']),
  30. 'date' => date('Y-m-d H:i:s', $row['time'])
  31. );
  32. }
  33. $messages = array_reverse($messages);
  34. $sth -> closeCursor();
  35.  
  36. echo json_encode($messages);
  37. ?>


plik sendMessage.json.php- wysylanie wiadomosci
  1. <?php
  2. chdir('./../');
  3. /*ąłśąłś*/
  4. require_once 'inc/config.php';
  5.  
  6. if (!isset($_SESSION['pid']))
  7. {
  8. die('Zaloguj się!');
  9. }
  10.  
  11. $text = (isset($_POST['text'])) ? $_POST['text'] : '';
  12. $location = (isset($_POST['location'])) ? intval($_POST['location']) : '';
  13. if (empty($text) || !is_numeric($location))
  14. {
  15. die('Wypełnij wszystkie pola!');
  16. }
  17.  
  18. $sth = $pdo -> prepare('INSERT INTO chat(author, time, message, location) VALUES(:pid, :time, :message, :location)');
  19. $sth -> bindValue(':pid', $_SESSION['pid']);
  20. $sth -> bindValue(':time', time());
  21. $sth -> bindValue(':message', $text);
  22. $sth -> bindValue(':location', $location);
  23. $sth -> execute();
  24. $sth -> closeCursor();
  25.  
  26. echo json_encode(1);


Plik HTML:
  1. <script type="text/javascript" src="js/chat.js"></script>
  2. <div class="send_form">
  3. <form id="sendMessage" method="post" action="json/sendMessage.json.php">
  4. <input type="text" style="width: 400px;" name="message" id="messageText" />
  5. <input type="submit" value="Wyślij" style="width:50px;" onclick="sendMessage(); return false;" />
  6. </form>
  7. </div>
  8. <div class="chat">
  9. Wczytywanie chatu...
  10. </div>


Oto kod JS:
  1. var lastId = 0;
  2. function show(data)
  3. {
  4. var chatDiv = $('.chat').html();
  5. var newElement = '<div class="msg"><div class="author">'+data['login']+':  </div> <div class="text">'+data['text']+'</div></div>';
  6. $('.chat').html(newElement+chatDiv);
  7. }
  8.  
  9. function getMessages(id)
  10. {
  11. $.ajax({
  12. type: 'GET',
  13. dataType: 'json',
  14. url: 'json/chat.json.php',
  15. data: { 'location': 0, 'id': id },
  16. success: function(result)
  17. {
  18. if (id == 0)
  19. {
  20. $('.chat').html('');
  21. }
  22. if (typeof result == 'object')
  23. {
  24. for (n in result)
  25. {
  26. show(result[n]);
  27. lastId = result[n]['id'];
  28. }
  29. }
  30. }
  31. });
  32. }
  33.  
  34. function getNew()
  35. {
  36. getMessages(lastId);
  37. }
  38.  
  39. function sendMessage()
  40. {
  41. var e = $('#sendMessage');
  42. var messageText = $('#messageText').attr('value');
  43.  
  44. $('#messageText').attr('value', '');
  45. $.ajax({
  46. type: e.attr('method'),
  47. url: e.attr('action'),
  48. dataType: 'json',
  49. data: { location: 0, text: messageText },
  50. success: function (result)
  51. {
  52. if (result != 1)
  53. alert('Wiadomość nie została wysłana!');
  54. }
  55. })
  56. }
  57.  
  58. getMessages(0);
  59. 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,