路线:
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 $请求,实际上我没有传递任何东西.
我尝试过本机PHP,它的工作原理.请注意,我添加了contentType:false,cache:false,processData:false,因为我还传递了一个文件.
我试图死和愚蠢(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类问题,我的语法错了.
解决方法:
使用$request-> all()将构造数据作为数组.