cakephp js helper ajax: идентификатор электронной почты не отображает имя в текстовом поле ввода - PullRequest
0 голосов
/ 21 марта 2012

У меня есть форма с текстовым полем для ввода электронной почты и текстовым полем для имени.

Когда пользователь вводит свой идентификатор электронной почты, автоматически выбирается и отображается правильное имя для этого идентификатора электронной почты (из базы данных) в текстовом поле ввода имени с использованием Ajax.

Ниже приведен мой код, но когда я ввожу идентификатор электронной почты и нажимаю кнопку вкладки, имя не отображается (способ, которым должен работать AJAX). Может кто-нибудь указать мне, где я иду не так? Спасибо.

Я пытаюсь сделать это, используя Cakephp, jquery и ajax.

Исходный код из браузера:

<script type="text/javascript">
//<![CDATA[
$(document).ready(function () {$("#MerryParentEmail").bind("keyup", function (event) 
{$.ajax({async:true, dataType:"html", success:function (data, textStatus)   
{$("#MerryParentName").html(data);}, type:"post", url:"\/merry_parents\/getname"});
    return false;});});
    //]]>
    </script>

view.ctp

<?php
echo $this->Session->flash();
echo $this->Form->create('MerryParent', array('default'=>false));

echo '<fieldset>';
echo '<legend>Parent Information</legend>';
echo $this->Form->input('MerryParent.email');
if (isset($name))
   echo $this->Form->input('MerryParent.name', array('label'=>'Parent/Guardian Name','value'=>$name));
else
   echo $this->Form->input('MerryParent.name', array('label'=>'Parent/Guardian Name'));

$this->Js->get('#MerryParentEmail');
$this->Js->event('keyup',
$this->Js->request(array(
'controller'=>'merry_parents',
        'action'=>'getname'),
            array('async'=>true,
                  'update'=>'#MerryParentName',
                  'method'=>'post')
     )
);

echo '</fieldset>';

echo $this->Form->end('Submit');

 ?>

merry_parents_controller.php

<?php
 class MerryParentsController extends AppController{
public $many_children_flag='false';
var $name='MerryParents';

function beforeFilter()//executed before any controller action logic
{   parent::beforeFilter();
    $this->Security->validatePost=false;  //set to false to completely skip the validation of POST request
        //parent::beforeFilter();
    if(isset($this->Security) && $this->RequestHandler->isAjax() && $this->action = 'getname'){
        $this->Security->enabled = false;
        $this->autoRender=false;
        }   
}

function getname(){
 if (!empty($this->data)){
    //var_dump($this->data);
    $merryparent_info=$this->MerryParent->getMerryParents($this->data['MerryParent']['email']);
    //print_r($merryparent_info);
    $name=$merryparent_info['MerryParent']['name'];
    $this->set('name',$name);
    //$this->render('/merry_parents/ajax_input');
    }
}
function view(){
    //$name='';
    //var_dump($this->data);
    //$this->getname();
}

модель merry_parent.php

function getMerryParents($field_value){
    if (is_int($field_value))
        $conditions=array('merryParent.id'=>$field_value);
    else
        $conditions=array('merryParent.email'=>$field_value);

    //debug($conditions);

    $merryparent_info=$this->find('first',array(
                                'conditions'=>$conditions,
                                'recursive'=>-1   //fetches merry_parents table data only not the associated data
                                ));

    //debug($merryparent_info);
    return $merryparent_info;
}

1 Ответ

0 голосов
/ 04 апреля 2012

Вы должны отправить данные формы обратно вашему контроллеру.При привязке JS-запроса к событию keyup вы вводите javascript или jQuery через прокси-методы CakePHP.И нет никакой автоматической привязки к данным вашей формы, так что вам придется управлять этим самостоятельно.

Однако в CakePHP для этого есть удобный параметр!Попробуйте

$this->Js->get('#MerryParentEmail');
$this->Js->event('keyup',
$this->Js->request(array(
'controller'=>'merry_parents',
        'action'=>'getname'),
            array('async'=>true,
                  'update'=>'#MerryParentName',
                  'dataExpression'=>true,
                  'data'=>$this->Js->serializeForm(array('inline'=>true)),
                  'method'=>'post')
     )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...