【发布时间】:2020-02-17 05:52:31
【问题描述】:
好吧,当我不使用 ajax 通过添加隐藏的 _method 参数(其中值为“PUT”)直接从表单向服务器发送数据时 -> 一切都像更新表单的魅力一样工作。但是,当我尝试使用 ajax 在控制器更新功能中为 $request 对象接收 null 时尝试相同的操作。现在我很害怕删除我必须使用method='POST'。
我同时使用了 method='POST' 或 type='POST' 但没有运气。
Route::resource('contents', 'ContentController');
let url_content_update = "{{ route('contents.update', ':id') }}";
WebApp.ContentController.onClickUpdateButton = function () {
var _id = $("#form_id").data('_id');
var form = $("#form_id")[0];
var formData = new FormData(form);
console.log(formData.get('title'));// console print "I am title" just fine.
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
url: url_content_update.replace(':id', _id),
method: 'PUT',
contentType:false ,
processData: false,
data: formData,
xhr: function() {
var xhr = new window.XMLHttpRequest();
xhr.upload.addEventListener("progress", function(evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
$('#status').html('Upload a file (compulsory):<b> Uploading -> ' + (Math.round(percentComplete * 100)) + '% </b>');
}
}, false);
return xhr;
},
success: function (result) {
},
error: function (jqXHR, exception) {
}
})
}
控制器: 成功收到 $id=383 的值。 但在 $request 对象中发现 null;
public function update(Request $request, $id)
{
$content = Content::find($id);
$content->app_id=$request->app_cat;
$content->cat_id=$request->category;
$content->sub_cat_id=$request->subcategory;
$content->title=$request->title;
$content->content_type=$request->type;
if($request->type==3||$request->type==4||$request->type==5){
//return json_encode($request->hasFile('any_file'));
if($request->hasFile('any_file')){
$content->content=$this->storeFile($request);
}
}else{
$content->content=$request->content;
}
$fileNameToStore='no_image.jpg';
if($request->hasFile('cover_image')){
$this->validate($request,[
'cover_image'=>'image|nullable|max:1999'
]);
$content->cover_image=$this->storeImage($request);
}
$content->save();
$output = array("message"=>"Content updated successfully", "status" => "200");
echo json_encode($output);
}
【问题讨论】:
-
你的路线怎么样?
-
PUT|补丁 |内容/{内容} |内容更新 | App\Http\Controllers\ContentController@update
-
看我的回答,如果有帮助请告诉我。
-
@AndySong 谢谢你......它就像魔法一样工作。只需添加 formData.append('_method', 'PUT'); 就解决了“神奇”的问题
-
你能投票并接受我的回答吗?哈哈
标签: javascript html ajax laravel request