2012-03-28 4 views
0

Wenn der Benutzer seine MerryParentEmail-Adresse eingibt, sollte der entsprechende Name aus der Datenbank abgerufen und im MerryParentName-Eingabefeld angezeigt werden. Ich habe bereits versucht, dies mit Ajax, Jquery und PHP zu tun und es hat funktioniert. Aber jetzt wird der entsprechende Name nicht angezeigt, wenn ich ajax, jquery und cakephp benutze.jquery Ajax cakephp: E-Mail nicht abrufen und entsprechenden Namen aus der Datenbank anzeigen

Die Alarmausgänge: Daten% 5BMerryParent% 5D% 5Bemail% 5D = b

jemand kann darauf hinweisen, wo ich falsch gehe? Vielen Dank.

default.ctp (Layout-Datei)

<script type="text/javascript"> 
    $(document).ready(function(){ 
    $("#MerryParentEmail").keyup(function(){ 
    //txt=$("#MerryParentEmail").val(); 
    txt=$("#MerryParentEmail").serialize(); 
    alert(txt); 
    $.post("../merry_parents/getname",txt,function(result){ 
     $("#MerryParentName").val(result); 
    }); 
    }); 
}); 
</script> 

view.ctp

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

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')); 

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->Security->enabled = false; 
     Configure::write('debug', 0); 
     $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 Modell

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; 
} 

Antwort

1

Versuchen:


//add 
$this->layout = false; 
//and instead of setting name simply echo the name from your function, like 
echo $name; 

Hoffnung, die

+0

Ja hilft, das funktioniert! :) Aber warum $ this-> layout muss auf false gesetzt werden? – vaanipala

+0

Froh, das zu wissen. Ja, da es Ajax und Sie brauchen kein Layout in Ihrem Fall, so sollte es auf false gesetzt werden –

+0

Ich habe versucht, ohne Einstellung $ This-> Layout auf falsch und es funktioniert immer noch. Übrigens funktioniert es nur mit Tastendruck nicht. – vaanipala

Verwandte Themen