2012-12-24 15 views
6

Aufgabe: wenn ich aus wählen Tag Kunde (ich habe customer_id), muss es Anfrage in DB und alle Kunden Feld zurückgeben. Und dann muss es automatisch einige Eingaben füllen. Ich versuche Ajax + jQuery zu machen. Ajax ist gut. Es funktioniert jetzt!Ajax Antwort ist falsch Weg

Hier JS:

ich dies herauszufinden:

<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 Aktion:

$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

Verwenden Sie Mod-Rewrite einer Art, um die angegebene URL in Ihrem Ajax-Aufruf '/ add' aufzulösen? – dbf

+0

vorübergehend deaktiviert 'isXmlHttpRequest' Check-in-Controller und testen Sie Ajax Aktion direkt im Browser zuerst. Sobald Sie es zum Laufen bringen, fügen Sie Sicherheitsbedingungen hinzu und implementieren Sie Ajax-Anrufe. – Alex

+0

danke für den Rat Alex, ich ändere URL zu '/ baza/add', aber in meinem firebug ist es POST http://www.voskmodel.dev/baza/add \t 200 OK 65ms ich denke customer_id senden nirgendwo – Stopper

Antwort

1

aus Ihrem Post ist es schwer zu verstehen, wenn das Problem auf dem Client oder Server-Seite ist ... In Ihrem ersten Beispiel, das Sie nicht customer_id in Ihrem Ajax-Request verwenden und Sie nicht brauchen, um den Wert zu Number werfen in Javascript.

Verwendung AJAX Anfrage Unten:

$(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); 
    } 
    }); 
}); 

Wie pro Ihre PHP-Code, sind overcomplicating Sie Dinge. Fügen Sie Ihre Checks am Anfang der Aktion hinzu und kommentieren Sie sie aus, während Sie versuchen, es zum Laufen zu bringen (so können Sie baza/add direkt im Browser testen), sobald Sie es kommentieren und testen. Verwenden Sie , um den JSON auszugeben.

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

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

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

ich endlich geschafft, können Sie schauen bei Code. Vielen Dank! – Stopper

Verwandte Themen