无法在CakePHP中使用ajax

时间:2013-06-13 19:51:42

标签: cakephp cakephp-2.0

我正在尝试在CakePHP 2.3中运行ajax请求。我正在处理这篇文章: simple ajax example with cakephp 2.3.0

我无法让它工作,这是我的代码:

$("#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();

    })

我从一个简单的测试开始,看看是否达到了成功功能,但我没有得到警告。我的代码出了什么问题?网址是正确的。网址/人工作,当我输入/ persons / create时,我得到一个CakePHP屏幕,说我没有视图(但我不想要一个,我正在做ajax。 我列出了我的控制器(PersonsController.php)

class PersonsController extends AppController
{
public $helpers = array('html', 'form');

public function index()
{

}

public function create()
{

}
}

我暂时将这些功能留空了,这样我就可以使基本功能正常工作了。

3 个答案:

答案 0 :(得分:1)

第一:为什么“得到”?似乎uber不安全的创建功能。通过POST进行ajax调用。

你说你不想要一个视图,但你的代码无处可指定。对于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
}

答案 1 :(得分:0)

您需要将“事件”传递给函数:

$("#node-form-save").click(function(event){
        event.preventDefault();
        ...
}

答案 2 :(得分:0)

这就是我如何做到这一点。它帮助

$(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;
    }
  }