• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Refresh via JavaScript

Status
Für weitere Antworten geschlossen.

BraCay

Neues Mitglied
Ich versuche gerade einen kleinen Chat für private Zwecke zuskripten. Als Refresh-Methode habe ich die <meta> Methode, was dann jeweils alle 5 Sekunden refresht. Ich wills natürlich eleganter haben, und jedesmal, wenn sich ein neuer Chattext hinzugefügt wird (ich lese eine Datei aus), dann soll diese Datei, wo der Textdatei reingeschrieben wird.

Ich bin zwar gut in PHP, HTML, CSS aber nicht in JavaScript, kann mir da jemand eine winzigen Codeschnipsel posten, der mein Problem löst? Oder auch einen Link posten, wo mein Problem gelöst wird?


Wäre sehr dankbar
 
Werbung:
Ich hatte damals ein Prototype ajax/php erstellt, für ein Chatsystem in einem Browsergame.
Jedoch habe ich es wieder rausgenommen, weil es doch eine relativ hohe Serverleistung und Traffic verbraucht, sobald mehr als 20 Leute im selben Chat-System sind.

Vielleicht ist es ja was für dich, basierend auf Comet:

Script für die Seite, wo der Chat sein soll:
HTML:
<p>
  <form action="" method="get" onsubmit="comet.doRequest($('zeit').value + $('word').value);$('word').value='';return false;">
    <input type="text" name="word" id="word" value="" />
    <input type="hidden" name="zeit" id="zeit" value="Nickname sagt: " />
    <input type="submit" name="submit" value="Send" />
  </form>
</p>
<p>
<script type="text/javascript">
var Comet = Class.create();
Comet.prototype = {

  timestamp: 0,
  url: './einchannel.php', //die Datei für den Rücklauf
  noerror: true,

  initialize: function() { },

  connect: function()
  {
    this.ajax = new Ajax.Request(this.url, {
      method: 'get',
      parameters: { 'timestamp' : this.timestamp },
      onSuccess: function(transport) {
        var response = transport.responseText.evalJSON();
        this.comet.timestamp = response['timestamp'];
        this.comet.handleResponse(response);
        this.comet.noerror = true;
      },
      onComplete: function(transport) {
        if (!this.comet.noerror)
          setTimeout(function(){ comet.connect() }, 5000); 
        else
          this.comet.connect();
        this.comet.noerror = false;
      }
    });
    this.ajax.comet = this;
  },

  disconnect: function()
  {
  },

  handleResponse: function(response)
  {
    $('content').innerHTML += 'Channel1 ' + response['msg'] + '<br />';
  },

  doRequest: function(request)
  {
    new Ajax.Request(this.url, {
      method: 'get',
      parameters: { 'msg' : request }
    });
  }
}
var comet = new Comet();
comet.connect();
</script></p>
Und hier das Script für den Rücklauf:
PHP:
<?php
$filename  = dirname(__FILE__).'/einchannel.txt'; //textdatei, in der die Chatnachrichten übergangsweise gespeichert werden.

$msg = isset($_GET['msg']) ? $_GET['msg'] : '';
if ($msg != '') {
  file_put_contents($filename,strip_tags(stripslashes($msg)));
  die();
}

$lastmodif    = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;
$currentmodif = filemtime($filename);
while ($currentmodif <= $lastmodif) {
  usleep(1000000);
  clearstatcache();
  $currentmodif = filemtime($filename);
}

$response = array();
$response['msg']       = file_get_contents($filename);
$response['timestamp'] = $currentmodif;
echo json_encode($response);
flush();
?>
Bedenke, das diese Methode (besonders bei vielen Usern) eine sehr hohen Traffic/Serverauslastung zu folge haben kann, da immer eine Verbindung mit dem Rücklauf besteht, wenn man auf der Chat-Seite ist.

Ich hoffe, ich konnte dir ein wenig helfen.

Mfg
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben