2012-12-24 25 views
6

Zadanie: kiedy wybieram klienta z wybranego tagu (mam customer_id), musi dostać żądanie do DB i zwrócić całe pole klienta. A potem musi automatycznie wypełnić niektóre dane wejściowe. Próbuję zrobić ajax + jQuery. Ajax jest dobry. Już działa!Odpowiedź Ajax przebiega niewłaściwie

Oto JS:

I rysunek to:

<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 działania:

$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

Czy używasz jakiegoś rodzaju przepisywanego przez mod, aby rozwiązać dany URL w wywołaniu Ajax "/ add"? – dbf

+0

tymczasowo wyłączone 'isXmlHttpRequest' sprawdź w kontrolerze i przetestuj działanie ajax bezpośrednio w przeglądarce. Gdy już to zrobisz, dodaj warunki bezpieczeństwa i zrealizuj połączenia ajaxowe. – Alex

+0

dzięki za radę Alex, zmieniam adres URL na "/ baza/add", ale w moim firebug to POST http://www.voskmodel.dev/baza/add \t 200 OK 65ms Domyślam się, że customer_id wysłanie nigdzie – Stopper

Odpowiedz

1

z Twojego postu, że trudno zrozumieć, czy problem jest po stronie klienta lub serwera ... W pierwszym przykładzie nie używasz customer_id w swoim wniosku ajax i nie trzeba rzucić wartość Number w javascript.

użycie AJAX Zapytanie Poniżej:

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

Zgodnie kodzie PHP, jesteś overcomplicating rzeczy. Dodaj swoje kontrole na górze akcji i skomentuj je, gdy próbujesz sprawić, aby działało (w ten sposób przetestuj baza/add bezpośrednio w przeglądarce), gdy uzyskasz je odkomentuj i przetestuj. Użyj polecenia JSON view helper, aby wyprowadzić json.

+0

W końcu udało mi się, możesz wyglądać przy kodzie. Dziękuję Ci! – Stopper

Powiązane problemy