2012-12-24 16 views
6

कार्य: जब मैं चुनिंदा टैग ग्राहक से चुनता हूं (मेरे पास ग्राहक_आईडी है), तो उसे डीबी में अनुरोध करना होगा और सभी ग्राहक फ़ील्ड वापस कर देना होगा। और फिर यह स्वचालित रूप से कुछ इनपुट भरना होगा। मैं AJAX + jQuery बनाने की कोशिश करता हूँ। अजाक्स अच्छा है। अब यह काम कर रहा है!अजाक्स प्रतिक्रिया गलत तरीके से चल रही है

यहाँ जेएस है:

मैं इस आंकड़ा बाहर:

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

पीएचपी init:

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

अजाक्स कार्रवाई:

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

एचटीएमएल:

<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

क्या आप अपने अजाक्स कॉल '/ एड' में दिए गए यूआरएल को हल करने के लिए किसी प्रकार के मॉड-रीराइट का उपयोग कर रहे हैं? – dbf

+0

अस्थायी रूप से अक्षम है 'isXmlHttpRequest' नियंत्रक में जांचें और पहले ब्राउज़र में सीधे AJAX कार्रवाई का परीक्षण करें। एक बार जब आप इसे काम कर लेते हैं तो सुरक्षा की स्थिति जोड़ें और आपको AJAX कॉल लागू करें। सलाह एलेक्स के लिए – Alex

+0

धन्यवाद, मैं '/ Baza/जोड़ने' के लिए यूआरएल को बदलने, लेकिन मेरे फ़ायरबग में यह पोस्ट http://www.voskmodel.dev/baza/add \t 200 ठीक 65ms मैं कहीं नहीं – Stopper

उत्तर

1
अपने पद से

यह समझना है, तो समस्या ग्राहक या सर्वर साइड ... पर है अपना पहला उदाहरण है कि आप अपने ajax अनुरोध में customer_id उपयोग नहीं कर रहे में मुश्किल है और आप Number के लिए मूल्य कास्ट करने के लिए की जरूरत नहीं है जावास्क्रिप्ट में।

उपयोग AJAX के नीचे अनुरोध:

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

अपने PHP कोड के अनुसार, आप चीजों को overcomplicating कर रहे हैं। कार्रवाई के शीर्ष पर अपने चेक जोड़ें और जब आप इसे काम करने की कोशिश कर रहे हों तो उन्हें बाहर टिप्पणी करें (इस तरह आप सीधे ब्राउज़र में baza/add का परीक्षण कर सकते हैं), एक बार जब आप इसे असंगतता और परीक्षण कर लेते हैं। जेसन आउटपुट के लिए JSON view helper का उपयोग करें।

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

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

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

मैंने अंततः इसे बनाया, आप देख सकते हैं कोड पर धन्यवाद! – Stopper