2012-12-24 16 views
6

Görev: select etiket müşterisinden seçim yaptığım zaman (customer_id var), DB'ye istek almalı ve tüm müşteri alanlarını iade etmeliyim. Ve sonra bazı girdilerin otomatik olarak doldurulması gerekir. Ajax + jQuery yapmaya çalışıyorum. Ajax iyidir. Şuan çalışıyor!Ajax yanıtı yanlış gidiyor

Bunu anlamaya:

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

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

html:

İşte

JS var Yayınınızdan
<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

Ajax çağrınızda '/ add' ifadesinde verilen URL'yi çözümlemek için bir çeşit mod yeniden yazıyor musunuz? – dbf

+0

geçici olarak 'isXmlHttpRequest' kontrolünü devre dışı bıraktı ve ajax eylemini doğrudan tarayıcıda test et. Çalıştırdıktan sonra güvenlik koşulları ekleyin ve size ajax çağrıları uygulayın. – Alex

+0

Öneri Alex için teşekkürler, url'yi '/ baza/add' olarak değiştirdim, fakat benim firebug'ımda POST http://www.voskmodel.dev/baza/add \t 200 OK 65ms sanırım customer_id hiçbir yere gönderim yok – Stopper

cevap

1

sorunun size ajax isteğinde customer_id kullanmıyorsanız ilk örnekte istemci veya sunucu tarafında ... açıksa anlamak zor ve Number değer döküm gerekmez javascript’te. Aşağıda

Kullanım AJAX İsteği: PHP kodu gereğince

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

, bir şeyler overcomplicating edilmektedir. Çeklerinizi eylemin en üst kısmına ekleyin ve çalışmayı denediğiniz sırada yorumlayın (bu şekilde baza/add'u doğrudan tarayıcıda test edebilirsiniz), bir kez uncomment ve test edin. Json çıkışı için JSON view helper kullanın.

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

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

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

nihayet yaptım. kodda. Teşekkür ederim! – Stopper