尝试集成CakePHP和jQuery
尝试集成CakePHP和jQuery,使用下一个示例 我想要的是,当用户更改第一个选项元素时,自动用正确的值填充第二个选择选项框。但是,什么也没发生,如果你能帮我解释原因的话 所以,有一个发票添加表单add.ctp,下一个代码是尝试集成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'
<?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更方便