2010-03-03 41 views
1

試圖整合的CakePHP和jQuery,使用下面的例子試圖整合的CakePHP和jQuery

http://bakery.cakephp.org/articles/view/dynamic-select-boxes-with-ajax-jquery

我想是當用戶改變首選項元素,以全自動填充正確的價值觀第二選擇選項框。但是,如果你能幫助我,爲什麼沒有任何反應。

因此,有發票添加表單(add.ctp),與下一個代碼...

<?php echo $form->create('Invoice');?> 

<?php echo $javascript->link('jquery.js'); 

$category = array('1' => 'First', '4' => 'Fourth', '7' => 'Seventh'); 
echo $form->input('client_id', array('options' => $category, 'empty' => 'Choose:')); 
echo $form->select('clientBank_id', array("Choose category first"), null, null, false); 
?> 


<script> 
$("#InvoiceClientId").change(function() { 
    $.post('/invoices/listTitleByCategory/' + $(this).val(), function(data) { 
     $("#InvoiceClientBankId").empty().append(data); 
    }, 'html'); 
}) 
</script> 

此外,還有控制器(invoices_controller.php):

<?php 
var $name = 'Invoices'; 
var $helpers = array('Html', 'Form', 'Time', 'Number', 'Javascript'); 
var $paginate = array('order' => array('Invoice.pinned DESC', 'Invoice.invoiceNumber')); 
var $components = array('RequestHandler'); 

function beforeRender(){ 
    // prevent useless warnings for Ajax 
    if($this->RequestHandler->isAjax()){ 
    Configure::write('debug', 0); 
    } 
} 

// etc... 

    function listTitleByCategory($category = "") { 
    $this->layout = 'ajax'; 
    $this->beforeRender(); 
    $this->autoRender = false; 

    $data = $this->Invoice->Client->find('list'); 

    echo "<option value=0>just for testing...</option>"; 

    foreach($data as $key => $val) { 
    echo "<option value=$key>$val</option>"; 
    } 
    } 


?> 

請,如果你能幫我解決這個問題。先謝謝你!

+0

我還沒有足夠好的在Firebug建議路線,但我會做的是將警報放入您的代碼中,按順序顯示每個值。當您將警報移至每個連續的下一行時,您會知道執行停止的位置(警報之前的行)。如果這一切似乎執行乾淨,我會使用LiveHTTPHeaders(一個FF插件),看看是否實際上發送ajax調用。 – 2010-03-03 16:34:18

+0

螢火蟲不難,並使用console.log(/ /您的消息在這裏)而不是alert()是更方便 – 2010-04-02 16:46:15

回答

0

你確定,你的第二個選擇的ID是'InvoiceClientBankId'嗎?

此外,如果您使用firebug與螢火蟲︰你在網絡選項卡中的結果?

+0

是的,第二個選擇框的ID是:InvoiceClientBankId 此外,我發送像請求: http:// localhost/myapp/invoices/listTitleByCategory/1 對我來說,它看起來像我不調用方法listTitleByCategory ...也許有問題嗎? – user198003 2010-03-03 14:40:23

+0

我檢查了一下,控制器方法返回了很好的值。 問題是,變量數據返回記錄(或某種錯誤?),或者我不知道如何使用它返回的值.... 請幫助: - ((((( – user198003 2010-03-03 15:20:01

+0

hmm ..一切都看起來好的,如果你以非ajax方式調用動作(通過調用localhost/myapp/invoices/listTitleByCategory/1)會發生什麼情況?是否有在線演示? – harpax 2010-03-03 18:22:19

0

您的代碼存在的問題是您在DOM滿載前嘗試調用jQuery調用。你需要把你的處理器在jQuery.ready()回調:(我也參加了<head>用蛋糕的JavaScript幫手輸出你的JS的自由)

<?php 
    $javascript->codeBlock(' 
     $(document).ready(function(){ 
      $("#InvoiceClientId").change(function() { 
       // stuff 
      }); 
     }); 
    ', array('inline'=>false')); 
?>