JS пост запрос и PHP обработчик (Помогите!!!)

shumik1

Новичок
Привет всем, уже сколько бъюся и нет результата, хочу сделать добавление комментов на JQuery, всё работает, добавляет нормально, но не могу вывести несколько ошибок сразу если они есть канешно, короче вот мой код:

PHP обработчик (addcomm.php):
Код:
<?php
@session_start();

if (strlen($_REQUEST['name']) == '0') {
    // Ошибка 1
    $error.= 'Введите ваше имя';
}

if (strlen($_REQUEST['mail']) == '0') {
    // Ошибка 2
    $error.= 'Введите Email адрес';
}

if (strlen($_REQUEST['comment']) == '0') {
    // Ошибка 3
    $error.= 'Введите коммент';
}


if ($error) {
    // Вывод всех ошибок (1,2,3)
} else {
    // Успешно Добавляем комментарий
}

?>
AJAX Скрипт:
Код:
function addcomm() {
    $.post('addcomm.php', $.param({
        name: $('#name').val(),
        mail: $('#mail').val(),
        comment: $('#comment').val()
    }),

    function(data) {
        // Вывод Комментария если нет ошибок из PHP обработчика
        $('#comment-output'&
#41;.html(data).slideDown(800);



        // Вывод ошибок из PHP обработчика
        $('#error').html
(data);    
    });
}
HTML форма:
Код:
// Вывод ошибок
<div id="error"></div>

// Вывод готового коммента
<div id="comment-output"></div>


// Вводим текст коммента
<textarea type="text" id="comment"></textarea><br />

<input type="submit" onclick="addcomm();" value="Добавить">
Так вот, я не пойму как вернуть результат из PHP обработчика на HTML страницу после нажатия кнопки Добавить, будь это ошибки или комментарий уже добавленый. Помогите пожалуйста, уже хрен знает сколько мучаюсь. СПС!
 

С.

Продвинутый новичок
Придумай сам любое условие, чтобы различать ошибку от не-ошибки. Это часть твоего алгоритма, а не JQuery.
 

Archil

Новичок
Например, можно возвращать сообщения в таком виде:"comment-output:комментарий", - или: "error:текст ошибки". При получении делаешь var arr = data.split(':')
 

Redjik

Джедай-мастер
Archil
Не торопись с такими советами, и открой для себя json
 

Archil

Новичок
Archil
Не торопись с такими советами, и открой для себя json
Ну я как бы написал как я бы сделал, через json наверно и правда было бы правильней делать. Используй json_encode для возврата данных и в джаваскрипте распарси этот JSON, немного сумбурно получилось:)
 

Redjik

Джедай-мастер
Ну и совсем правильно было бы, при success отдавать 200, при error - 403, тогда в $.ajax можно родные колбеки использовать
 

shumik1

Новичок
а например из php скрипта ещё нужно вывести весь комментарий вмсте с шаблоном в js скрипт, это всё тоже через массив выводится штоли? разве можно html кусок вывести через массив? мне кажется это неправильно как то...
 

Archil

Новичок
а например из php скрипта ещё нужно вывести весь комментарий вмсте с шаблоном в js скрипт, это всё тоже через массив выводится штоли? разве можно html кусок вывести через массив? мне кажется это неправильно как то...
Привели пример того, что будет отдавать php скрипт
 

shumik1

Новичок
короче вот до чего я додумался ток, 2 дня сидел но хватила ума токо так:

Ajax:
PHP:
function addcomments() {

	$.post("addcomments.php", $.param({
		name: $('#name').val(),
		mail: $('#mail').val(),
		comment: $('#comment').val()
	}),

	function(data) {
		var json = eval(data);

		if (json[0] == 'ok') {
			$('#comment_output').fadeIn('fast').append(json[1]);
		} else {
			$('#error').html(json.join('')).fadeTo('slow', 1);
		}
	});
}
PHP:
PHP:
$err = array();

if (strlen($_REQUEST['name']) == '0') {
	$err[] = 'Введите имя<br />';
	$CN_HALT = TRUE;
}

if (strlen($_REQUEST['mail']) == '0') {
	$err[] = 'Введите Email<br />';
	$CN_HALT = TRUE;
}

if (strlen($_REQUEST['comment']) == '0') {
	$err[] = 'Введите комментарий<br />';
	$CN_HALT = TRUE;
}

if ($CN_HALT) {
	echo json_encode($err);
} else {
	$comment = '<table width="100%"><tr><td>KoMMeHTapuu...<br /></td></tr></table>';

	$ok = array();
	$ok[] = 'ok';
	$ok[] = $comment;

	echo json_encode($ok);
}
Впринципе работает, выводит как надо, но мне кажется этонеправильно как то
 

Archil

Новичок
eval тут не при чем. Используй JSON.parse.
$CN_HALT = false; объяви в начале.
 

Archil

Новичок
http://javascript.ru/eval
Не используйте eval

Выполнение кода в eval может быть небезопасно. При таком выполнении затруднена отладка. В современном javascript, как правило, можно воспользоваться другими языковыми средствами вместо eval.
 

shumik1

Новичок
так а остальное правильно или можно как то упростить код? и php и js
 

Archil

Новичок
Ну в принципе оно то правильно, но все не логично выглядит.
1. strlen($_REQUEST['name']) == '0' - это никуда не годится. Правильно будет так isset($_POST['name']) && !empty($_POST['name']);
2. $CN_HALT не нужен, проверку делайте по массиву empty($err);
3. используйте тернарные операторы
PHP:
isset($_POST['name']) && !empty($_POST['name'])?$err[] = 'Введите имя<br />' : false;
Как-то так.
 

shumik1

Новичок
а вот этот код в js у меня правильный?

PHP:
        if (json[0] == 'ok') {
            // Выведет коммент
        } else {
            // Выведет ошибки
        }
Тоесть именно вот этот кусок:
if (json[0] == 'ok') {
 

shumik1

Новичок
или можно както передать из php обычную переменную не из массива для сравнения?
 

mrlasking

Новичок
Archil, shumik1, ребят, почитайте ман по ф-ции $.post, объявите тип данных, получаемых в колбеке как json, и будет у вас счастье ближе.

Второй шаг, для приближения счастья:
При генерации кода обработчиком, заводим массив ошибок и в зависимости от того, есть ли там элементы выводим результат, либо вообще флаг успешности
PHP:
if (callback.success== 1) //например
добавить.

Третий шаг:
Не нужно передавать с каждым комментом ошметки html кода, с этим легко справиться методами jQuery.
 
Сверху