Передача данных из запрашиваемой функции CakePHP обратно в jQuery - PullRequest
0 голосов
/ 16 ноября 2011

Я пытаюсь создать Ajax-валидацию с помощью jQuery-Event .blur () Я установил имена полей в id полей ввода, чтобы идентифицировать их и предоставить необходимые данные для проверки с помощью ajax-запроса к контроллеру. Пока все хорошо, я мог бы начать с проверки, но вот вопрос: Если есть ошибка - Как я могу отправить сообщение об ошибке обратно в jQuery, чтобы я мог сделать еще один ajax-запрос для его выдачи?

Спасибо за помощь, будем надеяться.

Вот сценарий JQuery-Script:

$('.registration').blur(function(){
  var id =  $(this).attr('id');
  var value = $(this).val();
  var dataString = 'id=' + id +'&value=' + value;

  $.ajax({
   type: "POST",
   url: "users/validate",
   data: dataString,
   cache: false,

   success: function(){  }
  });
});

Ответы [ 2 ]

0 голосов
/ 16 ноября 2011

Я бы рекомендовал использовать компонент Cake RequestHandler для обнаружения ajax-запроса.Затем вы установите для макета значение false, чтобы возвращалось только представление.

Затем выполните проверку в обычном порядке с использованием предпочтительного метода.

Наконец, если проверка не пройдена, вы можете вернутьпредставление 'json', в котором вы отображаете возвращенные ошибки проверки.

Вот базовый пример, охватывающий только запрос ajax и неудачную проверку:

Users controller:

  /**
   * use the RequestHandler component
   */
  public $components = array('RequestHandler');

  /**
   * validate action
   */
  public function validate()
  {
    /**
     * check if it's an ajax request
     */
    if ($this->RequestHandler->isAjax()) {

      $this->layout = false;

      /**
       * set incoming data in the user models data property
       */
      $this->User->set($this->data);

      if (!$this->User->validates()) {

        /**
         * return the validation errors and use a view than renders the json
         */
        $this->set('errors', $this->User->invalidFields());
        $this->render('/users/json/validate');

      }
    }
  }

users / json / validate.ctp

<?php echo $javascript->object($errors); ?>
0 голосов
/ 16 ноября 2011

На странице, которая его проверяет, должен быть напечатан JSON с результатами; как то так

Вид:

<?php
     echo $javascript->object($result);
?>

или

<?php
     echo json_encode($result);
?>

Контроллер

при условии, что вы делаете свои проверки и у вас есть переменная $ validate, которая имеет значение true, если evcrything в порядке

$this->layout='json_cont';
//do your validations here
if ($validate)
     $result = array(
          'result' => 1,
          'error' => null
      );
else 
     $result = array(
          'result' => 0,
          'error' => 'error validating'
      );
$this->set('result', '$result);

Вам также нужен макет json_cont

<?php
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
header('Content-Type: text/x-json');
echo $content_for_layout;
?>

наконец, вам просто нужно немного изменить свою функцию ajax

$.ajax({
   type: "POST",
   url: "users/validate",
   data: dataString,
   cache: false,
dataType: "json",
dataFilter: function(data, type) { 
    return data;
    },
success: function(data) {
    if (data != null && data.result == 0) {
        alert(data.error);
    }
    else {
        //do here something that accepts your validation, like a js function to give some info to the user or something
    }
},
error: function(data) { 
    try {                           
        alert('error doing the validation');
    } catch (e) { }
}
});

Я думаю, я ничего не пропустил, надеюсь, это поможет вам: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...