Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Комментарии без перезагрузки ajax
 
 автор: kapitalist   (07.09.2012 в 15:28)   письмо автору
 
 

Привет. Пытаюсь сделать комментарии без перезагрузки.
Написал код
$(document).ready(function() {
        $("#send").click(function(){
        var author = $("#author").val();
        var message = $("#message").val();              
        var id = $("#id").val();
        var avatar = $("#avatar").val();
        var login = $("#login").val();        
        var time = new Date(); 
        var date = time.getDate()+"-" +(time.getMonth()+1)+ "-" +time.getFullYear()+ " в " +time.getHours()+ ":"+time.getMinutes(); 
        $.post('modules/sendMessage.php', {'author':author,'message':message,'id':id,'avatar':avatar,'login':login}, function(data) {
         $("#commentBlock").append("<table class='comments'><tr><td width='90'><img src='"+avatar+"' id='ava'></td><td><div class='date'>"+date+"</div><span class='name'>"+author+"</span><p>"+message+"</p></td></tr></table>");
        });
    });

И обработчик на php

//**********************************************
if(empty($_POST['js'])){
    if($_POST['message'] != '' && $_POST['author'] != ''){

        $author = $_POST['author'];
        $message = $_POST['message'];
        $id = $_POST['id'];    
        $login = $_POST['login'];
        if ($login=="") {
        $login='user';
        }
        $date = date("Y-m-d H:i:s");
 $result = mysql_query("INSERT INTO comment (name, text, date, url, login) VALUES ('$author', '$message', '$date', '$id', '$login')");
        if($result == true){
            echo 0; //Ваше сообшение успешно отправлено
        }else{
            echo 1; //Сообщение не отправлено. Ошибка базы данных
        }
    }else{
        echo 2; //Нельзя отправлять пустые сообщения
    }
}

//**************************************** Если отключен JavaScript ************************************

if($_POST['js'] == 'no'){
    if($_POST['message'] != '' && $_POST['author'] != ''){

        $author = $_POST['author'];
        $author = addslashes($author);
        $author = htmlspecialchars($author);
        $author = stripslashes($author);
        $author = mysql_real_escape_string($author);
        
        $message = $_POST['message'];
        $message = addslashes($message);
        $message = htmlspecialchars($message);
        $message = stripslashes($message);
        $message = mysql_real_escape_string($message);

        $id = $_POST['id'];
        $id = addslashes($id);
        $id = htmlspecialchars($id);
        $id = stripslashes($id);
        $id = mysql_real_escape_string($id);        

        $login = $_POST['login'];
        if ($login=="") {
        $login='user';
        }
        $date = date("Y-m-d H:i:s");
 $result = mysql_query("INSERT INTO comment (name, text, date, url, login) VALUES ('$author', '$message', '$date', '$id', '$login')");
        if($result == true){
            echo "Ваше сообшение успешно отправлено"; //Ваше сообшение успешно отправлено
        }else{
            echo "Сообщение не отправлено. Ошибка базы данных"; //Сообщение не отправлено. Ошибка базы данных
        }
    }else{
        echo "Нельзя отправлять пустые сообщения"; //Нельзя отправлять пустые сообщения
    }
}

Но если я отправляю коммент на странице где нет комментариев, то он не выводится. Если на странице есть хотя бы один коммент, то он сразу отображается. Как сделать, чтобы он отображался сразу? Т.е. если даже комментов нет.

  Ответить  
 
 автор: confirm   (07.09.2012 в 15:47)   письмо автору
 
   для: kapitalist   (07.09.2012 в 15:28)
 

Где вы прочли, что методом $.post нужно отправлять данные именно так:
var author = $("#author").val();
var message = $("#message").val();
var id = $("#id").val();
.......
$.post('modules/sendMessage.php', {'author':author,'message':message....

?

  Ответить  
 
 автор: kapitalist   (07.09.2012 в 16:40)   письмо автору
 
   для: confirm   (07.09.2012 в 15:47)
 

Прочитал здесь http://www.ajaxs.ru/lesson/ajax/128-dobavlenie_kommentariev_bez_perezagruzki.html
А как сделать нужно?

  Ответить  
 
 автор: confirm   (07.09.2012 в 17:14)   письмо автору
 
   для: kapitalist   (07.09.2012 в 16:40)
 

Не читайте готовый код, который может быть написан бездумно, безграмотно, если хотите что-то познать, а читайте руководства по языку, библиотеке и т.п.. А в официальном руководстве (англ.), а также в русских его версиях хорошо описаны ajax-методы, и методы сопутствующие им.

А собирать код, который безграмотен, это коллекционировать хлам.

  Ответить  
 
 автор: kapitalist   (07.09.2012 в 20:57)   письмо автору
 
   для: confirm   (07.09.2012 в 17:14)
 

Начал читать. Написал вот такой код:
<script type='text/javascript'>
$(document).ready(function(){
    $("#send").click(function(){
        var name = $("#name").val();
        var text = $("#text").val();
        $.post("server.php", { name: name, text: text});
    });
    //setInterval('$("#comment").load("server.php");',10000);
});
</script>

Сообщение отправляется без перезагрузки и попадает в БД. А вот как его можно вывести, сразу после того как отправил?

  Ответить  
 
 автор: confirm   (07.09.2012 в 21:08)   письмо автору
 
   для: kapitalist   (07.09.2012 в 20:57)
 

Значит так, если бы вы прочли рекомендуемый раздел (а в нем не так и много), то такое бы вы не писали.
Первое - если вам нет особой нужды обращаться к элементам формы вычурным способом, по неким определяемым им id, то зачем они вообще нужны?
А посему так:
$(function(){ // это короче запись, чем $(document).ready(function(){ 
    $("#send").click(function(){ 
       $.post("server.php", $("form").serializeArray(), //это вернет объект как имя поля_формы=его_значение
             function(data) {
                //это вернулись данные с сервера, которые могут быть только что добавленное
                //которое и вставляйте на страницу
             }   
         }, 'html' //это тип возвращаемых данных); 
    }); 
    //setInterval('$("#comment").load("server.php");',10000); 
});

А чего у вас таймер делает?

  Ответить  
 
 автор: kapitalist   (07.09.2012 в 21:19)   письмо автору
 
   для: confirm   (07.09.2012 в 21:08)
 

Таймер должен подгружать новые записи. Но это я просто протестировать хотел, как это выглядеть будет. Поэтому я его и закоментил!

  Ответить  
 
 автор: confirm   (07.09.2012 в 21:22)   письмо автору
 
   для: kapitalist   (07.09.2012 в 21:19)
 

В коде у меня фигурная скобка лишняя затесалась. Должно быть так:
 }, 'html' //это тип возвращаемых данных);
//а скобку перед этой удалить

Если знаете для чего и как вставлять, то какие вопросы о выводе на страницу?

  Ответить  
 
 автор: kapitalist   (07.09.2012 в 21:54)   письмо автору
 
   для: confirm   (07.09.2012 в 21:22)
 

Так в том и проблема, что я не понимаю, что нужно написать для вывода на страницу!
             function(data) { 
            ЧТО ДОЛЖНО БЫТЬ ЗДЕСЬ???
             }    
         }, 'html' //это тип возвращаемых данных);

  Ответить  
 
 автор: confirm   (07.09.2012 в 22:01)   письмо автору
 
   для: kapitalist   (07.09.2012 в 21:54)
 

Там должен быть код, который вставляет данные на страницу. А какой, это зависит от того, что за данные возвращаются, куда и как вставляется и т.п., и т.д.. Если бы все решалось так "вставить!" и все, тогда бы сказал, что конкретно, а так, думайте, пишите код.

  Ответить  
 
 автор: kapitalist   (08.09.2012 в 11:34)   письмо автору
 
   для: confirm   (07.09.2012 в 22:01)
 

Ну в пхп файле я пишу
echo "Тут разные переменные";
Ну это мне и нужно вставить!

  Ответить  
 
 автор: kapitalist   (08.09.2012 в 11:49)   письмо автору
 
   для: confirm   (07.09.2012 в 22:01)
 

Разобрался! Немного другим образом, но работает!

  Ответить  
 
 автор: kapitalist   (08.09.2012 в 12:27)   письмо автору
 
   для: confirm   (07.09.2012 в 22:01)
 

Но мне все равно интересно, что нужно написать чтобы выводилась инфа с сервера?

  Ответить  
 
 автор: confirm   (08.09.2012 в 12:37)   письмо автору
 
   для: kapitalist   (08.09.2012 в 12:27)
 

Я вам уже написал - КОД, а какой конкретно, зависит не от вашего интереса, а от кода страницы и других факторов. Не задавайте вопросов глупых, а читайте и пишите код.

  Ответить  
 
 автор: SaIdEr   (07.09.2012 в 18:06)   письмо автору
 
   для: kapitalist   (07.09.2012 в 15:28)
 

Блин, какой же они код запутанный написали, когда можно сделать все намного проще :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования