SimBioT19
@SimBioT19
{{ user.about }}

Где в данном примере принимаются данные отправленные с помощью ajax?

Статья на 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"?
  • Вопрос задан
  • 353 просмотра
Решения вопроса 2
Pjeroo
@Pjeroo
Веб-разработчик
php.net/manual/ru/function.filter-input.php - filter_input — Принимает переменную извне PHP и, при необходимости, фильтрует ее
Ответ написан
matroskin13
@matroskin13
JavaScript developer, GO developer
в этой строке, по вашему нет присваивания? if(!($data['email'] = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
знаю что надо использовать tinyMCE.activeEditor.getContent(), но встаёт вопрос — как отправить этот "getContent"?

по хорошему, это можно бы выносить в отдельный вопрос.
var myContent = tinyMCE.activeEditor.getContent();

$.post('submit.php', myContent, function(msg){
    alert('отправлено!')
})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы