Can';不要让ajax在CakePHP中工作

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

我试图在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 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;
    }
  }