CakePHP 2.1 Ошибки проверки Ajax

Я пытаюсь получить ошибки проверки с помощью Ajax и jQuery, работающих в CakePHP 2.1 для контактной формы. При размытии поля имени вызывается функция js:

$(document).ready(function(){ $('#name').blur(function(){ $.post( '/Cake_ajax/Contacts/validate_form', { field: $(this).attr('id'), value: $(this).val() }, handleNameValidation ); }); function handleNameValidation(error){ if(error.length > 0){ if($('#name-notEmpty').length == 0){ $('#name').after($('<div id="name-notEmpty" class="error-message">' + error + '</div>')); } }else{ $('#name-notEmpty').remove(); } } }); 

Javascript вызывает функцию validate_form в моем контроллере:

 public function validate_form(){ if($this->RequestHandler->isAjax()){ $this->request->data['Contact'][$this->request->params['form']['field']] = $this->request->params['form']['value']; $this->Contact->set($this->request->data); if($this->Contact->validates()){ $this->autorender = FALSE; // don't render a view }else{ $error = $this->validateErrors($this->Contact); $this->set('error', $error[$this->request->params['form']['field']]); } } } 

На мой взгляд, я получаю пару ошибок при вызове ошибки:

 Undefined index: form [APP\Controller\ContactsController.php Undefined index: form [APP\Controller\ContactsController.php 

Я нахожусь на своем пути, и я довольно новичок в CakePHP. Любая помощь будет принята с благодарностью.

Related of "CakePHP 2.1 Ошибки проверки Ajax"

В вашем контроллере у вас должно быть что-то вроде ниже. Cake 2.0 заменяет многие функции в RequestHandlerComponent и Controller. Он также заменяет массив $ this-> params во всех местах и ​​старые данные $ this-> data на $ this-> request->, что-то вроде этого. Вы можете посетить руководство по миграции .

  public function validate_form(){ if($this->RequestHandler->isAjax()){ $this->request->data['Contact'][$this->request['form']['field']] = $this->request['form']['value']; $this->Contact->set($this->request->data); if($this->Contact->validates()){ $this->autorender = FALSE; // don't render a view }else{ $error = $this->validateErrors($this->Contact); // didn't validate logic $this->set('error',$this->Contact->validationErrors[$this->request['data']['field']][0]); } } } 

Попробуйте $this->request->params['field'] вместо $this->request->params['form']['field'] .

Или сразу после проверки на isAjax() попробуйте выполнить var_dump в параметрах $this->request->params . Из полученной вами ошибки индекс формы не существует в параметрах $this->request->params .

Если вы хотите имитировать POST, как это делается при использовании стандартной формы и Cake FormHelper, вы также можете просто назвать опубликованные параметры так же, как FormHelper называет поля ввода.

 $j.post( '/Cake_ajax/Contacts/validate_form', { "data[Contact][" + $(this).attr('id') + "]": $(this).val() }, handleNameValidation ); 

Это автоматически заполнило бы $this->request->data['Contact']['name'] и вы могли бы просто прокомментировать эту строку:

 //$this->request->data['Contact'][$this->request->params['form']['field']] = $this->request->params['form']['value'];