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

  • Автор темы Автор темы shumik1
  • Дата начала Дата начала

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.
 
Например, можно возвращать сообщения в таком виде:"comment-output:комментарий", - или: "error:текст ошибки". При получении делаешь var arr = data.split(':')
 
Archil
Не торопись с такими советами, и открой для себя json
Ну я как бы написал как я бы сделал, через json наверно и правда было бы правильней делать. Используй json_encode для возврата данных и в джаваскрипте распарси этот JSON, немного сумбурно получилось:)
 
Ну и совсем правильно было бы, при success отдавать 200, при error - 403, тогда в $.ajax можно родные колбеки использовать
 
а например из php скрипта ещё нужно вывести весь комментарий вмсте с шаблоном в js скрипт, это всё тоже через массив выводится штоли? разве можно html кусок вывести через массив? мне кажется это неправильно как то...
 
а например из php скрипта ещё нужно вывести весь комментарий вмсте с шаблоном в js скрипт, это всё тоже через массив выводится штоли? разве можно html кусок вывести через массив? мне кажется это неправильно как то...
Привели пример того, что будет отдавать php скрипт
 
короче вот до чего я додумался ток, 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);
}

Впринципе работает, выводит как надо, но мне кажется этонеправильно как то
 
eval тут не при чем. Используй JSON.parse.
$CN_HALT = false; объяви в начале.
 
так а остальное правильно или можно как то упростить код? и php и js
 
Ну в принципе оно то правильно, но все не логично выглядит.
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;

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

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

Тоесть именно вот этот кусок:
if (json[0] == 'ok') {
 
или можно както передать из php обычную переменную не из массива для сравнения?
 
Archil, shumik1, ребят, почитайте ман по ф-ции $.post, объявите тип данных, получаемых в колбеке как json, и будет у вас счастье ближе.

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

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