Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.08.2011, 23:48
top top вне форума
Интересующийся
Отправить личное сообщение для top Посмотреть профиль Найти все сообщения от top
 
Регистрация: 12.08.2011
Сообщений: 15

не работает чат на JSON
Сделал с помощью различных статей простенький чат и он работает, но узнал про json, решил переделать чат на новый лад. Но появилась проблема: сообщения выводятся, добавляются в базу, но приходится обновлять страницу вручную, чтобы появились новые сообщения, подскажите пожалуйста, что надо исправить. Вот код:
js код
$(document).ready(function(){
		$(".send_mess").keydown(function(){
			if (event.keyCode == 13) { Send(); };
		})
		$(".send_mess").focus();
		setInterval("Load();", 2500);
	});
	
	var nick = "friend";
	
	function Send(){
		$.ajax({
			type: "POST",
			url: "ajax.php",
			data: {
				action : "send",
				name : nick,
				message : $(".send_mess").attr('value')
			},
			dataType: "json",
			success: Load()
		});
		
		$(".send_mess").attr('value', '');
		$(".send_mess").focus();
		
		return false;
	}
	
	var lasr_message_id = 0;
	var load_in_process = false;
	
	function Load(){
		
		if (!load_in_process){
			
			load_in_process = true;
			
			$.ajax({
				type: "POST",
				url: "ajax.php",
				data: {
					action : "load",
					last : lasr_message_id
				},
				dataType: "json",
				success: function (result){
					eval(result.text);
					eval(result.id);
					$("#point_chat_div").scrollTop($("#point_chat_div").get(0).scrollHeight);
					load_in_process = false;
				}
			});
			
		}
		
	}

ajax.php
require "php/db_right.php";

	mysql_connect($way_db, $login_db, $password_db);
	mysql_select_db($point_db);
	
	mysql_query("SET NAMES 'utf8'");
	header("Cache-Control: no-cache, must-revalidate");
	header("Pragma: no-cache");
	header("Content-Type: text/javascript; charset=utf-8");
	
	if( isset($_POST['action']) ){
		switch ($_POST['action']){
			case "send" : Send(); break;
			case "load" : Load(); break;
			default : exit();
		}
	}
	
	function Send(){
		
		$name = substr($_POST['name'], 0, 200);
        $name = htmlspecialchars($name);
        $name = mysql_real_escape_string($name);
 
        $text = substr($_POST['message'], 0, 200);
        $text = htmlspecialchars($text);
        $text = mysql_real_escape_string($text);
 
        mysql_query("INSERT INTO chat (name,text) VALUES ('" . $name . "', '" . $text . "')");
	}
	
	function Load(){
		$last_message_id = intval($_POST['last']);
		$query = mysql_query("SELECT * FROM chat WHERE ( id > $last_message_id ) ORDER BY id DESC LIMIT 20");
		if( mysql_num_rows($query) > 0 ){
			$messages = array();
			while ( $row = mysql_fetch_array($query) ){
				$messages[] = $row;
			}
			$last_message_id = $messages[0]['id'];
			$messages = array_reverse($messages);
			$js = array();
			$js['id'] = "lasr_message_id = ". $last_message_id .";";
			foreach ( $messages as $value ){
				$js['text'] .= '$("#chat_message").append("<span>' . $value['name'] . '&raquo; ' . $value['text'] . '</span>");';
			}
		}
		echo json_encode($js);
	}
Ответить с цитированием
  #2 (permalink)  
Старый 13.08.2011, 00:25
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

ты исполняешь функцию, а не передаешь её. убери скобки

function Send(){
		$.ajax({
			type: "POST",
			url: "ajax.php",
			data: {
				action : "send",
				name : nick,
				message : $(".send_mess").attr('value')
			},
			dataType: "json",
*!*
			success: Load()
*/!*
		});
Ответить с цитированием
  #3 (permalink)  
Старый 13.08.2011, 00:42
top top вне форума
Интересующийся
Отправить личное сообщение для top Посмотреть профиль Найти все сообщения от top
 
Регистрация: 12.08.2011
Сообщений: 15

Спасибо, всё работает, но при этом, когда отправляешь сообщения, можно сказать, перезагружаются все сообщения, а не добовляются в конец. По моги пожалуйста с этой проблемой=)
Хотя раньше добавлялись...
Ответить с цитированием
  #4 (permalink)  
Старый 13.08.2011, 00:49
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

ну это функция лоад у тебя и делает

сейчас мб код медленней исполняется (там 2 eval вижу), поэтому кажется, что раньше они добавлялись.

раз это чат, то просто после save вызывай не загрузку всего заново, а просто добавляй сообщение скриптом, без запроса


посмотрел твой код и решил, что это будет как-то так.

function Send(){
        $.ajax({
            type: "POST",
            url: "ajax.php",
            data: {
                action : "send",
                name : nick,
                message : $(".send_mess").attr('value')
            },
            dataType: "json",
*!*
            success: function(){
                $("#chat_message").append("<span>"+nick+"&raquo;"+$('.send_mess').attr('value')+"</span>");
            }
*/!*
        });
Ответить с цитированием
  #5 (permalink)  
Старый 13.08.2011, 02:04
top top вне форума
Интересующийся
Отправить личное сообщение для top Посмотреть профиль Найти все сообщения от top
 
Регистрация: 12.08.2011
Сообщений: 15

СПАСИБО за помощь
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает код внутри циклов DZHETIGAPA Events/DOM/Window 1 21.06.2011 01:03
Очень нужно.. Отправка HTML куски в JSON от сервера используя Ajax bivnikus jQuery 8 26.10.2010 23:54
jQuery. Обработка ошибок и JSON. mma_mma jQuery 3 19.07.2010 12:10
не работает JSON в JQuery 1.4.1 mcpro jQuery 7 22.03.2010 17:56
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 15:59