2011-09-07 3 views
0

Я пытаюсь заставить работать чат, который является копией из учебника. По какой-то причине функция загрузки чата, кажется, запускается дважды каждый раз, когда она должна запускаться один раз! Это убивает меня, я не могу понять, что случилось.Javascript чат, показывающий одни и те же сообщения несколько раз

Вот моя копия пасты чат: http://www.releazed.com/chat/

здесь полный исходный код: http://myslimchatroom.wikidot.com/

Я думаю, что его что-то связана с last_message_id но ив был отладки это, и это, кажется, знает правильный ...

Пожалуйста, помогите :(

+0

Это много кода для прохода. Можете ли вы определить соответствующий фрагмент кода и разместить его здесь? –

+0

Вы пробовали отладку с помощью 'console.log'? – yoda

+0

В любом случае, по внешнему виду кажется, что метод 'Load', вызываемый сразу после метода« Отправить », должен загружать новые сообщения без учета учетной записи клиента. – yoda

ответ

0

устранил проблему, просто удалив один из самых важных частей JS eval(result); лол ... я думаю, jquery делает это самостоятельно? Ну его работа ...

0

заменить нагрузки)

с конца отправить с функцией, которая просто пишет на экране

+0

удалил и ничего не изменил, обновил код примера. –

0

Попробуйте исправить код PHP от

$js .= "last_message_id = $last_message_id;"; 

в

$js .= "last_message_id = $last_message_id + 1;"; 
+0

Не думаю, что это необходимо, поскольку новый last_message_id установлен до этого. –

+0

Вы попробовали? Я думаю, это происходит потому, что вы печатаете сообщение в команде SEND, и у вас также есть таймер, который отображает одно и то же сообщение, потому что вам нужно увеличить счетчик сообщений после того, как пользователь опубликует новое сообщение –

+0

, я ничего не изменил. –

0

Это может работать в нагрузке() изменить команду $ post на это:

   $.post("ajax.php", 
     { 
       act: "load", // point out that it is downloading messages 
       last: last_message_id, // pass number of the last message that the user was last boot 
       rand: (new Date()).getTime() 
     }, 
      function (result) { // this function as a parameter is passed javascript code, which we must comply 
       eval(result); // execute script from the server 
       $(".chat").scrollTop($(".chat").get(0).scrollHeight); // scrolls the message down 
       load_in_process = false; // say that downloading is over, we can now start a new download 
     }, 
     "text"); 
0

В вашем коде оператор if, чтобы увидеть, находится ли загрузка уже в процессе, как-то отсутствует в функции Load(). (Это было хорошо в том месте, скопированных из, я не знаю, что пошло не так):

function Load() { 
    // Check whether we can download the message. This is done to ensure that we do not start the download again, if the old download is not over yet. 
    if(!load_in_process) //this line was missing 
    { //also missing 
      load_in_process = true; // Loading started 
      // refer the request to the server, which returns us javascript 
      $.post("ajax.php", 
      { 
        act: "load", // point out that it is downloading messages 
        last: last_message_id, // pass number of the last message that the user was last boot 
        rand: (new Date()).getTime() 
      }, 
       function (result) { // this function as a parameter is passed javascript code, which we must comply 
        eval(result); // execute script from the server 
        $(".chat").scrollTop($(".chat").get(0).scrollHeight); // scrolls the message down 
        load_in_process = false; // say that downloading is over, we can now start a new download 
      }); 
    } //also missing 
} 
Смежные вопросы