CakePHP AJAX调用

A. *_*lam 4 ajax jquery cakephp

我正在使用CakePHP,这是我在这个框架上的第一个项目.我将把输入的值发送给UsersController's check_username()action.并填充一个id na为返回的字符串的元素check_username().到目前为止,我所做的是:

//in my form
<input type="text" name="data[User][username]" style="width: 60%" required="required" id="username" oninput="check_username(this.value)">
<label style="margin-left: 20px; color: red" id="na">Not Available!</label>

//after the form
<script type="text/javascript">
    function check_username(un) {
        $.ajax({
            type: 'POST',
            url: '/oes/users/check_username',
            data: {username:un},
            cache: false,
            dataType: 'HTML',
            beforeSend: function(){
                $('#na').html('Checking...');
            },
            success: function (html){
                $('#na').val(html);
            }
        });
    }
</script>

//and my check_username() is
public  function check_username(){
    return 'Test string';
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.有人知道为什么或如何修改它以便它的工作原理?

And*_*nik 5

它可能是您的check_username控制器操作的问题.CakePHP-way是使用JsonView类发送任何数据抛出XHR(参见http://book.cakephp.org/2.0/en/views/json-and-xml-views.html).它允许您使用.json扩展名调用任何操作(例如:/oes/users/check_username.json)并以序列化JSON格式获取响应,而无需在数组数据和JSON之间进行手动转换.

当然,建议您使用此方法,但没有义务.

现在我认为CakePHP尝试渲染check_username视图,但由于您没有指定或创建它,因此无法执行此操作.尝试将您的操作代码更改为以下内容:

public function check_username(){
     $this->autoRender = false;
     echo 'Test string';
}
Run Code Online (Sandbox Code Playgroud)

此外,尽量不要在将来使用此类代码构造.