2017-10-20 16 views
0

J'essaie de sélectionner un contrat dans la liste déroulante, mais il semble que l'appel Ajax renvoie des informations pour tous les contrats au lieu de simplement l'ID envoyé. Nare dans l'esprit que je suis très nouveau à ZF2.L'appel Ajax ZF2 renvoie toutes les informations au lieu de simplement l'ID

// view.phtml

<script> 
function loadContractId(id) 
{ 
    $.getJSON('<?php echo $this->basePath();?>/ajax/getId/'+id+'', function(data) { 


    $("#ctrid").text(data["arr"][0].ctr_id); 
    $("#ctrspec").text(data["arr"].ctr_spec); 
    $("#ctrnutype").text(data["arr"].ctr_nu_type); 
    $("#ctrlocationcity").text(data["arr"].ctr_location_c); 
    $("#ctrlocationstate").text(data["arr"].ctr_location_s); 

    $.each(data["arr"], function (index, item) { 
     console.log(item); 
    }); 

    }); 
    $("#contact_holder").css('visibility','visible'); 
} 

</script> 


<div id="loc_placement_panel" class="p0pup"> 
    <form name="loc_placement_form" method="post" action="<?php echo $this->basePath(); ?>/booking/view/add"> 
     <input type="hidden" name="ph_id" value="<?php echo $ar["ph_id"]; ?>"> 
     <input type="hidden" name="pres_status" value="2"> 
     <input type="hidden" name="ph_name" value="<?php echo $ar["ctct_name"]; ?>"> 

     <!--<input type="hidden" name="addon" value="see below">--> 
     <strong>Placements</strong><br/><br/> 

     <label><strong>Contract:</strong></label> 

     <select name="contactlist" id="contactlist" onchange="loadContractId($('#contactlist').val())"> 
     <?php 
       foreach ($ctrLT as $row=>$ar_contracts) 
       { 
        echo "<option value='".$ar_contracts['ctr_id']."'>"; 
        echo $ar_contracts['ctr_no']; 
        echo "</option>"; 
       } 
      ?> 
     </select> 

     <div id="contact_holder" style="visibility: hidden"> 
      <strong>Ctr id: </strong><span id="ctrid" ></span><br/> 
      <strong>Spec: </strong><span id="ctrspec" ></span><br/> 
      <strong>Nurse Type: </strong><span id="ctrnutype" ></span><br/> 
      <strong>City: </strong><span id="ctrlocationcity" ></span><br/> 
      <strong>State: </strong><span id="ctrlocationstate" ></span><br/> 
     </div> 


     <label><strong>User Name:</strong></label> 
     <input type="text" name="loc_location" id="loc_location" value="<?php echo $ar["ctct_name"]; ?>" /> 


     <label><strong>$ltcontracts:</strong></label> 
     <textarea id="txtArea" rows="10" cols="100" name="loc_location" id="loc_location" value=""><?php '<pre>'; print_r($ltcontracts); '</pre>';?></textarea> 


     <br/><br/> 
     <!-- <input type="submit" value="Submit" id="loc_placement_submit_btn" name="loc_placement_submit_btn" /> --> 
     <input type="button" value="Cancel" id="loc_placement_cancel_btn" /> 
    </form> 
</div> 

// AjaxController.php

// LT contracts 
    public function getId($id) { 
     $id = (int) $id; 
     return $this->getResortObject('retainedResort',$id); 
    } 

    // LT contracts 
    public function getIdAction() { 

     $result = new \stdClass(); 

     $arr = $this->getContractsTable()->selectLtContracts($id); 
     $result->code = Response::STATUS_CODE_200; 

     $result->arr = $arr; 
     $json = Json::encode($result); 
     $response = $this->getResponse(); //new Response(); 
     $response->setStatusCode($result->code); 
     $response->getHeaders()->addHeaders(array('Content-Type'=>'application/json')); 
     $response->setContent($json); 
     return $response; 
    } 

// ContractTable.php

J'ai essayé aussi avec id sélectionné, ($select->where('ctr_id = ?', $id);) mais il didn ne fonctionne pas.

public function selectLtContracts($id = 0, array $ar = null) { 


    $this->table='allcontracts'; 
    $select = new Select($this->table); 
    $select->where->like('ctr_no', '%LT'); 
    $resultSet = $this->selectWith($select); 

    $ar = array(); 
    if($resultSet) 
    { 
    $i=0; 
     foreach ($resultSet as $row) { 

     $ar[$i]['ctr_id']=$row->ctr_id; 
       $ar[$i]['ctr_no']=$row->ctr_no; 
       $ar[$i]['ctr_spec']=$row->ctr_spec; 
       $ar[$i]['ctr_nu_type']=$row->ctr_nu_type; 
       $ar[$i]['ctr_location_c']=$row->ctr_location_c; 
       $ar[$i]['ctr_location_s']=$row->ctr_location_s; 
       $ar[$i]['ctr_nurse']=$row->ctr_nurse; 
       $ar[$i]['ctr_type']=$row->ctr_type; 
       $ar[$i]['ctr_marketer']=$row->ctr_marketer; 
       $ar[$i]['ctr_recruiter']=$row->ctr_recruiter; 
     $i+=1; 
     } 
    } 

    return $ar; 
    } 

C'est ce que je reçois de ma console lorsque je sélectionne un contrat unique dans la liste déroulante:

enter image description here Toute idée?

+0

'selectLtContr acts ($ id); '- vous prenez ici une variable $ id ... mais $ id n'est défini nulle part dans la méthode' getIdAction() '. Je ne connais pas votre cadre spécifique, mais il semble assez évident que vous devez définir la variable avant de pouvoir l'utiliser. Devrait être 'getIdAction ($ id)', peut-être? Consultez les documents de votre infrastructure pour savoir comment accéder aux variables d'entrée envoyées par le client. – ADyson

+0

Il est également évident que vous n'utilisez pas '$ id' n'importe où dans les méthodes' selectLtContracts' - même si vous transmettiez une valeur réelle dans cette méthode, vous ne l'utilisez pas pour restreindre les résultats de la base de données. C'est pourquoi il renvoie une grande liste au lieu d'un seul élément. – ADyson

+0

C'est exact. Merci. La réponse est probablement dans le modèle ContractTable.php. Je vais comprendre ça ce soir. – Blackcoat77

Répondre

0

Fondamentalement, j'oublié d'inclure dans getIdAction() le paramètre 'id' unique de la route:

$id = (int) $this->params()->fromRoute('id', 0); 

et dans le ContractsTable.php je devais ajouter equalTo() predicate:

...

if($id!='' && $id > 0) 
    $where->equalTo('ctr_id', $id); 

    $select->where($where); 

...