Can';不要让ajax在CakePHP中工作
我试图在CakePHP2.3中运行一个ajax请求。我在这个岗位上工作: 我无法让它工作,这是我的代码:Can';不要让ajax在CakePHP中工作,cakephp,cakephp-2.0,Cakephp,Cakephp 2.0,我试图在CakePHP2.3中运行一个ajax请求。我在这个岗位上工作: 我无法让它工作,这是我的代码: $("#node-form-save").click(function(){ event.preventDefault(); var firstName = $("#node-form-first-name").val(); var lastName = $("#node-form-last-name").val(); var
$("#node-form-save").click(function(){
event.preventDefault();
var firstName = $("#node-form-first-name").val();
var lastName = $("#node-form-last-name").val();
var dob = $("#node-form-dob").val();
$.ajax({
url:'/persons/create',
type: 'GET',
datatype: 'json',
data: {firstName: firstName, lastname: lastName, dob:dob},
success: function(data){
alert("succes");
}
});
$('#modal-pop').jqmHide();
})
我从一个简单的测试开始,看看是否达到success函数,但是我没有得到任何警告。我的代码有什么问题?url是正确的。url/persons可以工作,当我输入/persons/create时,我会看到一个CakePHP屏幕,上面显示我没有视图(但我不想要视图,我正在使用ajax)。
我在下面列出了我的控制器(PersonsController.php)
我暂时将函数留空,只是为了让基本功能正常工作。首先:为什么“获取”?对于创建函数来说似乎更不安全。改为通过POST进行ajax调用
您说过您不想要视图,但是您的代码没有指定这一点
public function create() {
$this->autoRender = false;
}
而且,如果您这样做,您将不会得到任何回报,因此在操作中,您需要回显这些值,以便ajax可以接收这些值
还有一个提示,您可以通过一个简单的检查将您希望使用ajax实现的功能与普通方法分离
public function create() {
if( $this->request->is('ajax') ) {
$this->autoRender = false;
echo 'hello result';
return;
}
//else, handle this action as a normal one and render a view and whatever
}
您需要将“事件”传递给函数:
$("#node-form-save").click(function(event){
event.preventDefault();
...
}
我就是这样做的。希望能有所帮助
$(document).ready(function() {
$(".submit").click(function(event){//my submit button has class name 'submit'
event.preventDefault();
$.ajax({
type:"POST",
url:"/cakephp/messages/create/",
success : function(data) {
alert('success');
}
});
});
});
控制器
public function create(){
if( $this->request->is('ajax') ) {
$this->autoRender = false;
echo 'hello result';
return;
}
}
您写了“因此在操作中,您需要回显值以便ajax可以接收它。”这意味着什么?这意味着如果不渲染视图,ajax将得到什么结果?什么都没有。因此您回显结果,类似于
回显“[{id:1}]”
或有效的json。这样,jquery的success函数就可以接收结果并对其进行解析。我刚刚在我的create()函数中添加了$this->autorender=false;回显“hello”;但警报仍然没有发生。我甚至将警报更改为警报(数据);仍然没有。还有什么想法吗?如果有帮助的话:我最初制作了ajax,但忘记了首先在控制器中制作create()函数。当时,参数显示在url上(因为是GET…是的,只是用于测试。)但是在我制作create()之后,现在我在单击save.Debug时在url中看不到任何参数。请使用fail选项(jqXHR.fail(function(jqXHR,textStatus,errorshown){});
)查看返回的内容。如果它也没有返回任何内容,那么我认为您可能找到了错误的url。此外,如果您仍在使用GET进行测试,那么参数需要位于create内部(create(
).没有帮助。但我认为您不需要这样做,我阻止了默认操作,即使没有传入事件。。。
public function create(){
if( $this->request->is('ajax') ) {
$this->autoRender = false;
echo 'hello result';
return;
}
}