Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 28 мар 2024, 21:23

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 12 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 02 июн 2012, 17:57 
Не в сети
Новичок

Зарегистрирован: 02 июн 2012, 17:50
Сообщения: 14
Привет парни,
Вообщем хочу сделать добавление в базу с аяксом, но данные не добавляются. Без Аякса - все работает. Нашел в инеие пример, делал по нему, но увы.

JS код
Код:
<script type="text/javascript">
(function($){   
   var form;
   function postSuccess(errors){

      $('.form-error, .form-success').hide();

      if (!errors.length && errors.length !== undefined) {

         form.reset();

         $('.form-success')
            .hide()
            .html('Message successfully sent!')
            .fadeIn('fast');

      } else {
         
         $.each(errors, function(key, val){

            var id = $('[name="' + key + '"]').attr('id');

            $('label[for="' + id + '"] .form-error')
               .hide()
               .html(val)
               .fadeIn('fast');
         });

      }
   }

   $('#ajax-form').submit(function(e){

      form = this;

      e.preventDefault();

      $.ajax({
         type: 'POST',
         url: this.action,
         data: $(this).serialize(),
         dataType: 'json',
         success: postSuccess
      });
   });

})(this.jQuery);
</script>


HTML
Код:
<form action="" method="post" id="ajax-form" accept-charset="utf-8">   <fieldset>

      <p class="form-success helper-hidden"></p>

      <div class="field">
         <label for="field-email">
            <span class="abc">Email</span>
            <span class="form-error">
                        </span>
         </label>
         <input type="text" id="field-email" name="email" />      </div>

      <div class="field">
         <label for="field-message">
            Message
            <span class="form-error">
                        </span>
         </label>
         <textarea id="field-message" name="message" cols="50" rows="10" style="height: 60px"></textarea>      </div>

      <input type="submit" id="submit" name="submit" value="Submit" class="button" />   </fieldset>
</form>


PHP
Код:
if(isset($_POST['submit']))
      {
         $username = $_POST['email'];
         $password = $_POST['message'];
         $insert = DB::insert('users')->columns(array('username', 'password'))->values(array($username, $password));
         list($insert_id, $affected_rows) = $insert->execute();
      }


Помогите пожалуйста реализовать
На названия полей не обращайте внимания, дело не в этом


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 июн 2012, 18:21 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Немного занят. У вас фаербаг стоит ? Там очень удобно отслеживать аякс запросы.

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 июн 2012, 18:28 
Не в сети
Новичок

Зарегистрирован: 02 июн 2012, 17:50
Сообщения: 14
Да, есть, пробую там тоже, но пока ничего не разобрать ((.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 июн 2012, 18:41 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Исходники дадите, посмотрю.
Нет времени создавать эти файлы.

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 июн 2012, 18:58 
Не в сети
Новичок

Зарегистрирован: 02 июн 2012, 17:50
Сообщения: 14
Загрузил. Там именно те файлы, которые задействованы, не стал весь framework кидать, но если лучше весь, то без проблем


Вложения:
ajax.7z [28.61 КБ]
Скачиваний: 337
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 июн 2012, 21:16 
Не в сети
Бывалый

Зарегистрирован: 02 июн 2012, 07:14
Сообщения: 69
В PHP Вы проверяете существование ключа submit в массиве $_POST
Код:
if(isset($_POST['submit']))
{
     $username = $_POST['email'];
     $password = $_POST['message'];
     $insert = DB::insert('users')->columns(array('username', 'password'))->values(array($username, $password));
     list($insert_id, $affected_rows) = $insert->execute();
}

Но метод .serialize() на js не сериализует саму кнопку, по которой была отправлена форма (да и вообще сейчас смотрю как-то мутно у него с кнопками..).
Код:
data: $(this).serialize(),

Как вариант проверять в php наличие нужных полей вместо submit.
А ещё лучше вынести обработку ajax запроса в отдельный метод, а то сейчас получается что ajax запрос подхватывает шаблоны и возвращает кучу всего(вместе с формой, скриптами и стилями), хотя вроде как и не должен.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 июн 2012, 21:38 
Не в сети
Новичок

Зарегистрирован: 02 июн 2012, 17:50
Сообщения: 14
Будет очень нагло если я попрошу показать, всё что Вы выше писали, на коде?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 июн 2012, 21:41 
Не в сети
Новичок

Зарегистрирован: 02 июн 2012, 17:50
Сообщения: 14
а про serialize(), я просто во многих примерах видел такое


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 июн 2012, 22:49 
Не в сети
Бывалый

Зарегистрирован: 02 июн 2012, 07:14
Сообщения: 69
C serialize() всё верно, нужно только изменить обработчик. В массиве $_POST нету ключа submit. Можно изменить
Код:
if(isset($_POST['submit']))
на
Код:
if(isset($_POST['email']) AND isset($_POST['message']))

Это решит вашу проблему и данные начнут сохраняться в базу.
Но есть другой момент, в Вашем случае ajax-запрос должен возвращать только информацию о успешности операции, либо какие-нибудь ошибки, сейчас же он возвращает целиком всю страницу. Как вариант для ajax-запросов можно сделать отдельный контроллер, который будет наследоваться от Controller, а не от Controller_Template, ну и там уже держать экшены, которые будут обрабатывать сами запросы. Вот пример для Вашего кода:
Код:
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Ajax extends Controller {

   public function action_new_user()
   {
      $username = $_POST['email'];
      $password = $_POST['message'];
      $insert = DB::insert('users')->columns(array('username', 'password'))->values(array($username, $password));
      list($insert_id, $affected_rows) = $insert->execute();
   }

}

Ну и конечно же не помешали бы какие-нибудь валидации перед записью в базу.., правда это наверное ещё только наброски.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 июн 2012, 23:44 
Не в сети
Новичок

Зарегистрирован: 02 июн 2012, 17:50
Сообщения: 14
Спасибо большое, ajax сработал. По-поводу отдельного контроллера буду пробовать чуть позже. Валидацию попробую реализовать


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group