Показать сообщение отдельно
  #1 (permalink)  
Старый 13.01.2017, 14:36
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

Передача файла на сервер ajax
Добрый день! Пытаюсь написать обработчик формы через которую пользователь оставляет отзыв и может прикрепить фотографию.

Все отлично работает кроме загрузки фотографии, она попросту не загружается, а почему я не понимаю, все делаю правильно вроде бы, а она не грузиться хоть ты убей, при этом консоль нечего не говорит, успешно возвращается success, и network в консоли говорит что все "ок, информация передана".

Может быть причина в php, может в клиенте, я уже не знаю, прошу взглянуть на мои скрипты, может вы поймете где у меня ошибка:

Разметка формы:
<form id="contact-form" enctype="multipart/form-data" method="post" action="comments/add_comments">
	<input type="name" placeholder="Ваше имя" name="comments_name">
	<input type="text" placeholder="Город/поселок" name="comments_city">
	<input type="email" placeholder="Ваш e-mail адрес" name="comments_email">
	<input type="tel" placeholder="Ваш номер телефона" name="comments_phone">
	<textarea placeholder="Пожалуйста напишите Ваш отзыв, здесь" name="comments_message" rows="3"></textarea><br>
	<br>
	<label class="control-label">Вы можете поделиться фотографиями с отдыха:</label><br>
	<br>
	<input type="file" name="img">
	<br>
	<button type="submit" class="button--8">ОСТАВИТЬ ОТЗЫВ</button>
</form>


JS обработчик формы:
$("form#contact-form").submit(function(e){
	e.preventDefault();
	var f = this,
		   data = $(f.elements).slice(0, -1),
        s = $(f.elements).last(),
        e = s.end().slice(0, -2).removeClass('input-error').filter(function() {
            return !$.trim(this.value)
        });
    if(e.length) e.addClass('input-error');
	else {
		s.prop('disabled', 1);
        s.end().not(s);
		$.ajax({
			url: f.action,
			type: 'POST',
			data: data,
			dataType: 'json',
			success: function(data) {
				thx('open');
				create_comments(data);
				f.reset();
				s.prop('disabled', 0);
				e.removeClass('input-error');
				$('body').animate(
					{
						scrollTop:$('.row.comment:first').offset().top - $('.navbar').outerHeight()
					},
					500
				);
			}
		});
	}
});


Обработчик на сервере:
//КОНТРОЛЛЕР
function add_comments() {
	$config['upload_path'] = './photo/';
	$config['allowed_types'] = 'gif|jpg|png|jpeg';
	$config['max_size']	= '3000';
	$config['encrypt_name']	= TRUE;
	$config['remove_spaces'] = TRUE;
	$this->load->library('upload', $config);
	$this->upload->do_upload();
			
	$image_data = $this->upload->data();
			
	$comments['name']  = $_POST['comments_name'];
	$comments['city'] = $_POST['comments_city'];
	$comments['email'] = $_POST['comments_email'];
	$comments['phone'] = $_POST['comments_phone'];
	$comments['comment'] = $_POST['comments_message'];
	$comments['img'] = $image_data['file_name'];
			
	$comment_id = $this->main_model->new_comments($comments);
			
	$comment = array();
	if ($comment_id)
	{
		$comment = $this->main_model->get_comments_limit(0,1);
	}
			
	echo json_encode($comment);
}
// МОДЕЛЬ
function new_comments($comments){
	$array = array(
		'date' => date("Y-m-d H:i:s", time()),
		'name' => $comments['name'],
		'city' => $comments['city'],
		'email' => $comments['email'],
		'phone' => $comments['phone'],
		'comment' => $comments['comment'],
		'img' => $comments['img']
	);
	$this->db->insert('comments', $array); 
	return $this->db->insert_id();
}


Заранее благодарен за любую помощь

P.S. Серверная часть написана на php-фреймворке Codignaiter
Ответить с цитированием