2012-12-24 7 views
6

Compito: quando scegliamo dal tag select customer (ho customer_id), è necessario ottenere la richiesta nel DB e restituire tutto il campo cliente. E poi è necessario riempire automaticamente alcuni input. Provo a creare ajax + jQuery. L'Ajax è buono. Sta lavorando adesso!Risposta Ajax sta andando in modo errato

Ecco JS:

ho questo numero:

<script> 
$(document).ready(function() { 
    $('#customer_load').change(function() { 
     $.ajax({ 
      url: '<?= $this->url(array('action' => 'ajax', 'controller' => 'baza')) ?>', 
      type: 'POST', 
      dataType: 'json', 
      data: { 
        // list of request parameters 
        'customer_id': $(this).attr('value') 
      }, 
      success: function(data) { 
        //alert(data.current_discount); 
        $('#extra_discount').val(data.extra_discount); 
        $('#current_discount').val(data.current_discount); 
        $('#customer_number').val(data.customer_id); 
      } 
     }); 
    }); 
}); 

PHP init:

$this->_helper->AjaxContext()->addActionContext('add', 'json')->initContext('json'); 

Ajax azione:

$id= $this->_getParam('customer_id'); 
$result = $this->_customers->fetchSelected($id); 
$this->view->customers = $result; 
$this->_helper->json($result); 

html:

<select name="customer_id" id="customer_load" style="width:300px;"> 
    <option value="0">Выберите заказчика</option> 
     ?php foreach ($this->customers as $cus): ?> 
    <option value="<?= $cus['customer_id'] ?>"" <?php if ($cus['customer_id'] == $this->form_data['customer_id']) echo "selected"; ?> ><?= $cus['lastname'] . " " . $cus['name'] ?></option> 
    <?php endforeach; ?> 
    <option value="new" onclick="NewCustomer()">Новый заказчик</option> 
    </select> 
+0

Si sta utilizzando una riscrittura mod di qualche tipo per risolvere l'URL specificato nella chiamata Ajax '/ add'? – dbf

+0

disabilitato temporaneamente 'isXmlHttpRequest' controlla il controller e prova prima un'azione ajax direttamente nel browser. Una volta che lo fai funzionare aggiungi condizioni di sicurezza e implementa le chiamate ajax. – Alex

+0

grazie per il consiglio Alex, cambio l'url in '/ baza/add', ma nel mio firebug è POST http://www.voskmodel.dev/baza/add \t 200 OK 65ms suppongo che customer_id invii da nessuna parte – Stopper

risposta

1

dal tuo post è difficile capire se il problema è sul client o lato server ... Nel vostro primo esempio non si utilizza customer_id nella richiesta Ajax e non è necessario per il cast del valore a Number in javascript.

Usa AJAX richiesta sottostante:

$(document).ready(function(){ 
    $.ajax({ 
    url: <?= $this->url(array('action' => 'add', 'controller' => 'baza')) ?>, 
    type: 'POST', 
    dataType: 'json', 
    data: { 
     // list of request parameters 
     'customer_id': $('select[name=customer_id] option:selected').val(), 
    }, 
    success: function(results){ 
     // analyze your response and add custom logic 
     console.debug(result); 
    } 
    }); 
}); 

Secondo il vostro codice PHP, si overcomplicating cose. Aggiungi i tuoi controlli nella parte superiore dell'azione e commentali mentre stai provando a farlo funzionare (in questo modo puoi testare baza/add direttamente nel browser), una volta che hai funzionato il commento e il test. Utilizzare JSON view helper per emettere il json.

public function addAction() 
    { 
     // checks/validation/etc 

     // do some processing...    
     $result = $this->_customers->fetchSelected($id); 

     // Send the JSON response: 
     $this->_helper->json($result); 
    } 
+0

finalmente ce l'ho fatta, puoi guardare al codice. Grazie! – Stopper