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)
但这不起作用.有人知道为什么或如何修改它以便它的工作原理?
它可能是您的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)
此外,尽量不要在将来使用此类代码构造.