Can't get ajax to work in CakePHP

荒凉一梦 提交于 2019-12-12 01:52:53

问题


I am trying to run an ajax request in CakePHP 2.3. I am working off of this post: simple ajax example with cakephp 2.3.0

I cant get it to work, here is my code:

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

    })

I started with a simple test, to see if the sucess function is reached, but I get no alert. What is wrong with my code? The url is correct. The url /persons works, and when I type in /persons/create I get a CakePHP screen saying that I have no view (but I don't want one, I am doing ajax. I list my controller (PersonsController.php) below

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

public function index()
{

}

public function create()
{

}
}

I left the functions blank for now, just so I can get the basic functionality working.


回答1:


First: why "get"?? Seems uber insecure for a create function. Do the ajax call by POST instead.

You said you don't want a view, but your code nowhere specifies that. For ajax, and to avoid rendering the view and the layout, do this

public function create() {
    $this->autoRender = false;
}

Also, if you do that, you won't get anything in return, so in the action, you need to echo the values so ajax can recieve it.

And a tip, you can separate the functions you want to excecute with ajax and the normal way with a simple check

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
}



回答2:


You need to pass the "event" to the function:

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



回答3:


this is how i have done this.hope it helps

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

            }
        });
    });
});

Controller

public function create(){
    if( $this->request->is('ajax') ) {
        $this->autoRender = false;
        echo 'hello result';
        return;
    }
  }


来源:https://stackoverflow.com/questions/17095792/cant-get-ajax-to-work-in-cakephp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!