Статья на
ruseller по созданию комментариев, я её уже вдоль и поперёк перерыл, но понять никак не могу — где здесь принимаются отправленные serialize-данные?
/* Ловим событие отправки формы: */
$('#addCommentForm').submit(function(e){
e.preventDefault();
if(working) return false;
working = true;
$('#submit').val('Working..');
$('span.error').remove();
/* Отправляем поля формы в submit.php: */
$.post('submit.php',$(this).serialize(),function(msg){
working = false;
$('#submit').val('Submit');
...
Вот часть скрипта-обработчика, скажите, какая строка отвечает за "получение" отправленных ajax данных?
submit.php
<?php
class Comment
{
private $data = array();
public function __construct($row)
{
/*
/ Конструктор
*/
$this->data = $row;
}
public static function validate(&$arr)
{
/*
/ Данный метод используется для проверки данных отправляемых через AJAX.
/
/ Он возвращает true/false в зависимости от правильности данных, и наполняет
/ массив $arr, который преается как параметр либо данными либо сообщением об ошибке.
*/
$errors = array();
$data = array();
// Используем функцию filter_input, введенную в PHP 5.2.0
if(!($data['email'] = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)))
{
$errors['email'] = 'Пожалуйста, введите правильный Email.';
}
if(!($data['url'] = filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL)))
{
// Если в поле URL был введн неправильный URL,
// действуем так, как будто URL не был введен:
$url = '';
}
// Используем фильтр с возвратной функцией:
if(!($data['body'] = filter_input(INPUT_POST,'body',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
{
$errors['body'] = 'Пожалуйста, введите текст комментария.';
}
if(!($data['name'] = filter_input(INPUT_POST,'name',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
{
$errors['name'] = 'Пожалуйста, введите имя.';
}
if(!empty($errors)){
// Если есть ошибки, копируем массив $errors в $arr:
$arr = $errors;
return false;
}
// Если данные введены правильно, подчищаем данные и копируем их в $arr:
foreach($data as $k=>$v){
$arr[$k] = mysql_real_escape_string($v);
}
// email дожен быть в нижнем регистре:
$arr['email'] = strtolower(trim($arr['email']));
return true;
}
private static function validate_text($str)
{
/*
/ Данный метод используется как FILTER_CALLBACK
*/
if(mb_strlen($str,'utf8')<1)
return false;
// Кодируем все специальные символы html (<, >, ", & .. etc) и преобразуем
// символ новой строки в тег <br>:
$str = nl2br(htmlspecialchars($str));
// Удаляем все оставщиеся символы новой строки
$str = str_replace(array(chr(10),chr(13)),'',$str);
return $str;
}
}
?>
UPD: Вообще, проблема заключается в следующем: я поставил wysiwyg-редактор tinyMCE, но комментарий появляется только со второго нажатия на кнопку, знаю что надо использовать tinyMCE.activeEditor.getContent(), но встаёт вопрос — как отправить этот "getContent"?