2012-03-21 3 views
0

電子メールの入力テキストボックスと名前の入力テキストボックスを持つフォームがあります。cakephp js helper ajax:電子メールIDは入力テキストボックスに名前を表示しません

ユーザーが電子メールIDを入力すると、その電子メールIDの正しい名前が自動的に取得され、Ajaxを使用して名前入力テキストボックスに表示されます(データベース)。

以下は私のコードですが、メールIDを入力してタブボタンを押すと、名前は表示されません(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; 
} 

答えて

0

フォームのデータをコントローラに送り返す必要があります。 JSリクエストをkeyupイベントにバインドするときには、それぞれJavascriptにCakePHPプロキシメソッドを使用してjQueryを入力しています。また、フォームデータへの自動バインディングもないので、それを自分で管理する必要があります。

しかし、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') 
    ) 
); 
関連する問題