0

お問い合わせフォームのCakePHP2.1で動作するAjaxとjQueryで検証エラーを取得しようとしています。名前フィールドがぼやけると、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にかなり慣れていません。どんな助けでも大歓迎です。

4

3 に答える 3

2

$this->request->params['field']の代わりに試してください$this->request->params['form']['field']

または、にチェックを入れた直後にisAjax()、でvar_dumpを実行してみてください$this->request->params。発生しているエラーから、フォームインデックスはに存在しません$this->request->params

于 2012-04-19T23:50:05.350 に答える
2

コントローラには、次のようなものがあります。Cake 2.0は、RequestHandlerComponentとControllerの多くの機能を置き換えます。また、すべての場所の$ this-> params配列と、古い$this->dataを$this->request->dataに置き換えます。移行ガイドにアクセスできます。

    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]);
          }
       }
    }
于 2012-04-20T10:33:42.433 に答える
0

標準フォームとCakeFormHelperを使用する場合のように、POSTをシミュレートする場合は、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'];
于 2012-04-20T07:34:59.670 に答える