Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试集成CakePHP和jQuery_Jquery_Cakephp - Fatal编程技术网

尝试集成CakePHP和jQuery

尝试集成CakePHP和jQuery,jquery,cakephp,Jquery,Cakephp,尝试集成CakePHP和jQuery,使用下一个示例 我想要的是,当用户更改第一个选项元素时,自动用正确的值填充第二个选择选项框。但是,什么也没发生,如果你能帮我解释原因的话 所以,有一个发票添加表单add.ctp,下一个代码是 <?php echo $form->create('Invoice');?> <?php echo $javascript->link('jquery.js'); $category = array('1' => 'First'

尝试集成CakePHP和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>
此外,还有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>";
   }
  }


?>

拜托,如果你能帮我解决这个问题。提前谢谢你

您确定第二次选择的id为“InvoiceClientBankId”吗


另外,如果您将firefox与firebug一起使用:您在网络选项卡中得到结果了吗?

代码的问题是您试图在DOM完全加载之前调用jQuery调用。您需要将处理程序放入jQuery.ready回调中:

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

我还冒昧地使用Cake的Javascript助手在中输出您的JS。

是的,第二个选择框的id是:InvoiceClientBankId。另外,我正在发送like请求:对我来说,看起来我不调用方法listTitleByCategory。。。可能有问题吗?我检查了更多,控制器方法返回了好的值。问题是变量数据返回noting或某种错误?,或者我不知道如何使用它返回的值。。。。请帮忙:-嗯。。一切看起来都很好。如果通过调用localhost/myapp/invoices/listTitleByCategory/1以非ajax方式调用该操作,会发生什么情况?有在线演示吗?我在Firebug方面还不够好,无法提出这个方法,但我要做的是在代码中添加警报,按顺序显示每个值。当您将警报移动到每一个连续的下一行时,您将知道执行在警报之前停止该行的位置。如果所有这些看起来都执行得很干净,我会使用LiveHTTPHeaders和FF插件来查看ajax调用是否真的被发送。firebug并不难,在这里使用console.log//your message而不是alert更方便