使用ajax将表单数据发布到控制器操作(laravel)时遇到麻烦

时间:2017-03-30 15:36:11

标签: php jquery ajax laravel

路线:

Route::post('admin/cms/create','CmsController@createmenu');

控制者的行动:

public function createmenu(Request $request){
        $menu = new menu;
        $this->validate($request,[
            'name'=>'required',
            's_title'=>'required_if:s_exist,1',
            's_desc'=>'required_if:s_exist,1',
            's_path'=>'required_if:s_exist,1',
            'category'=>'required'
        ]);
        $path=$request->file('s_path')->store('img/slideshow');
        $menu::create([
            'name'=>$request->name,
            's_exist'=>$request->s_exist,
            's_title'=>$request->s_title,
            's_desc'=>$request->s_desc,
            's_path'=>$path,
            'category'=>$request->category
        ]);
        return redirect('admin/cms');
    }

Ajax(jquery):

$("#f_ins_menu").on("submit",function(e){
    e.preventDefault();
    var data={};
    $.ajax({
        type:"POST",
        //url:$(this).attr("action"), //I would like it to work with this dynamic url
        url:"cms/create", //this file is inside the folder admin
        //I also tried without the map function
        data:$(this).serializeArray().map(function(x){data[x.name] = x.value;}),
        contentType:false,
        cache:false,
        processData:false,
    });
});

createmenu操作不使用ajax

我有另一个使用Ajax的动作,但它有效,但区别在于:在那个动作中我没有通过Request $request,实际上我没有传递任何东西。

我尝试过原生PHP,但它确实有用。请注意,我添加了contentType:false, cache:false, processData:false,因为我也传递了一个文件。

我试过死亡和dumb(dd)$ request参数,我得到了一大块代码,我认为是一个类,所以我的想法是Request $ request param没有得到我通过ajax传递的数据

是的,我已将CSRF_FIELD与我在此处找到的元标记技巧包括在内https://laravel.com/docs/5.4/csrf

至少看到我传递的数据是数组格式还是json格式,有人可以帮助我,无所谓。

我不希望你们查看所有代码。你能告诉我这个功能/动作的正确版本吗?

public function createmenu(Request $request){
    return dd($request); //I've tried this but it returns alot of code in console.log when I do the success:function()
}

我只是想看看我通过的数据,至少,我可以从那里开始。

编辑:

忘了提一下,使用validate方法,HTTP响应为422,没有验证,HTTP响应为500

编辑2:

好的,所以在响应ajax时不要使用die和dumb(dd()),只需使用return和一些数据。为了访问ajax的请求,我能够,感谢@ Lorav的评论:

data:{data:$(this).serialize()},

$data = $request->data;

所以这不是Request类问题,我的语法错了。

1 个答案:

答案 0 :(得分:1)

使用$ request-> all()将构建的数据作为数组。