0

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

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

非常感谢任何帮助。

4

2 回答 2

0

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

此外,您需要提供在您的 AJAX 调用中value (id)新选择的,如您的函数声明中所定义的那样。小心你正在请求而不是,因为后者是前者调用的。customer <option>getInitials($id)getInitialsgetInitialsById

最后,我不相信echo会奏效。你需要做$this->response->body(json_encode($initials));http://book.cakephp.org/2.0/en/controllers/request-response.html#CakeResponse::body

于 2013-11-07T17:37:06.647 回答
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;
})

尚未经过测试,但这应该可以。

于 2013-11-07T23:18:47.863 回答