jQuery从视图调用到cakePHP函数

时间:2013-11-07 15:17:44

标签: javascript jquery cakephp cakephp-2.3

在视图中我有一个这样的下拉列表:

<div class="input select"><label for="customer">Customer</label><select name="data[Project][customer_id]" id="customer">
<option value="16">Customer1</option>
<option value="17">Customer2</option>
</select>

我想用jQuery做的是,无论是在页面加载还是在下拉选择选项更改中,jquery都会使用给定的选项值调用控制器函数并从函数中获得预期的返回值。以下是控制器部分:

public function getInitials($id){
         $this->autoRender = false;
         if($this->request->is('ajax')){
             $initials = $this->Customer->getInitialsById($id);
                     echo json_encode($initials);

    }}

JQuery不是我擅长的东西,但我做了研究并试图采取一些类似的功能并使其工作,但没有任何简单的工作,我觉得我做了一些完全错误的事情。这是jQuery:

    jQuery(document).ready(function($){

        $('#customer').change({
       var initials = "";
       $("select option:selected").each(function(){
            initials = "<?php echo Router::url(array('controller'=>'projects','action'=>'getInitialsById')) ?>"
});
$("div").text( initials );
        });

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您需要正确设置AJAX通话:http://api.jquery.com/jQuery.ajax/http://api.jquery.com/jQuery.getJSON/

此外,您需要在AJAX调用中提供新选择的value (id)的{​​{1}},如customer <option>函数声明中所定义。请注意,您要求getInitials($id)而不是getInitials,因为后者被称为 前者。

最后,我不相信getInitialsById会起作用。您需要echohttp://book.cakephp.org/2.0/en/controllers/request-response.html#CakeResponse::body

答案 1 :(得分:0)

在文档加载时调用make AJAX调用是没有意义的,因为这是在从下拉列表中选择选项之前发生的。

为了在选择选项后进行AJAX调用,请添加以下代码:

$('#customer').change(function(){
    var data = $('#inputEl option:selected').val();

    $.ajax({
        type:'POST',
        async: true,
        cache: false,
        url: <?php echo Router::url(array('controller'=>'projects','action'=>'getInitialsById')) ?>,
        success: function(response) {
            jQuery('[ID OF ELEMENT TO HOLD REPONSE (OPTIONAL)').html(response);
        },
        data: data
    });
    return false;
})

尚未经过测试,但应该有效。