Groove
Новичок
AJAX Не могу понять принцип когда надо обновлять весь список
Есть список комментариев, у каждого есть в скрытом диве форма добавления комментария, добавление происходит при помощи AJAX.
Проблема: не могу понять каким образом получить добавлен ли комментарий или ошибка, например не заполнено поле или неверно заполнено. Если без проверки - все ясно
Если добавлять просто див после текущего комментария, тогда мы можем упустить то, что за все ответа могут появиться и другие комментарии. решение - обновлять весь список комментариев, но допустим юзер не заполнил текст комментария, или он был не авторизован и ввел имя существующего пользователя, в ответ бессмысленно перегружать весь список.
Т.е. самое простое что приходит на ум - это когда есть ошибка - загружать в "comment_list" только форму с ошибками, а когда все проверки успешные - перегружать весь "comment_list" все существующие комментарии.
Посмотрел как это сделано на хабре сейчас: при попытке отправить пустой комментарий он не добавляет его и не выдает никакого сообщения, что коментарий пуст, он просто перегружает весь список комментариев.
Как можно проверить правильность заполнения и отдать ответ?
Т.е. на этом примере:
когда есть ошибки заполнения - перегружать div id="comment_reply_1", а когда нет ошибок - div id="comment_list" ?
при всем при том, что в js явно указан див принимающий обновление своего содержания
P.S.: решение в лоб по пунктам:
1) обновлять
2) в случае ошибки выдавать саму форму с ошибками в этот див
3) в случае если ошибок нет серверный скрипт '/ajax/comment.html?commentID=' + commentID
должен вернуть одно слово "update", а в функции, которая навешена на onSuccess проверять что пришло:
но это как то не правильно же, может быть кто подскажет сам алгоритм?
Заранее благодарен.
Есть список комментариев, у каждого есть в скрытом диве форма добавления комментария, добавление происходит при помощи AJAX.
PHP:
<div id="comment_list">
<div id="comment1">
тест комментария 1
<div id="comment_reply_1" style="display:none">
тут форма добавления комментария в ответ на комментарий 1
</div>
</div>
<div id="comment2">
тест комментария 2
<div id="comment_reply_2" style="display:none">
тут форма добавления комментария в ответ на комментарий 2
</div>
</div>
<div id="comment3">
тест комментария 3
<div id="comment_reply_3" style="display:none">
тут форма добавления комментария в ответ на комментарий 3
</div>
</div>
</div>
Если добавлять просто див после текущего комментария, тогда мы можем упустить то, что за все ответа могут появиться и другие комментарии. решение - обновлять весь список комментариев, но допустим юзер не заполнил текст комментария, или он был не авторизован и ввел имя существующего пользователя, в ответ бессмысленно перегружать весь список.
Т.е. самое простое что приходит на ум - это когда есть ошибка - загружать в "comment_list" только форму с ошибками, а когда все проверки успешные - перегружать весь "comment_list" все существующие комментарии.
Посмотрел как это сделано на хабре сейчас: при попытке отправить пустой комментарий он не добавляет его и не выдает никакого сообщения, что коментарий пуст, он просто перегружает весь список комментариев.
PHP:
var SubmitCommentID = 0;
function SubmitCommentUnlock(request)
{
if (s = $('cpb' + SubmitCommentID)) s.disabled = false;
if (s = $('csb' + SubmitCommentID)) s.disabled = false;
}
function SubmitComment(commentID, f)
{
id = SubmitCommentID = commentID > 0 ? commentID : 'f';
if (s = $('cpb' + id)) s.disabled = true;
if (s = $('csb' + id)) s.disabled = true;
new Ajax.Updater('commentsdiv',
'/ajax/comment.html?commentID=' + commentID,
{asynchronous:true,
parameters: Form.serialize(f),
onSuccess: SubmitCommentUnlock });
return false;
}
Т.е. на этом примере:
PHP:
<div id="comment_list">
<div id="comment1">
тест комментария 1
<div id="comment_reply_1" style="display:none">
тут форма добавления комментария в ответ на комментарий 1
</div>
</div>
при всем при том, что в js явно указан див принимающий обновление своего содержания
PHP:
new Ajax.Updater('commentsdiv',
P.S.: решение в лоб по пунктам:
1) обновлять
PHP:
new Ajax.Updater('comment_reply_1',
3) в случае если ошибок нет серверный скрипт '/ajax/comment.html?commentID=' + commentID
должен вернуть одно слово "update", а в функции, которая навешена на onSuccess проверять что пришло:
PHP:
function SubmitCommentUnlock(request)
{
if('update'==request.responseText){
//вот тут обновить ВЕСЬ список комментариев
}
if (s = $('cpb' + SubmitCommentID)) s.disabled = false;
if (s = $('csb' + SubmitCommentID)) s.disabled = false;
}
Заранее благодарен.