php - 无法继续下一条路线,因为我的 ajax 保持返回 422 状态
问题描述
我正在我的页面上设置一个进度条,该进度条将通过单击提交按钮触发。正如我在一些教程中所学到的,它需要 Ajax 使其运行,并在上传完成时保持返回错误 422,并阻止我去 POST 路由。我的代码有问题吗?或者是否有任何其他解决方案可以制作进度条?
我试图检查我的代码,查看我的 Ajax 设置,似乎一切都刚刚好。但是 Ajax 响应仍然是代码 422。
@php
session_start();
session_destroy();
@endphp
@extends('template.master')
@section('title', 'Upload Data')
@section('head')
<meta name="csrf-token" content="{{ csrf_token() }}" />
@endsection
@section('content')
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item active" aria-current="page">Upload Your File</li>
</ol>
</nav>
<br />
<form method="POST" action="/uploadpage/submit" enctype="multipart/form-data">
@csrf
<div class="col-8">
<input type="file" id="file-upload" name="file-box" class="form-control-file" />
</div>
<br />
<div class="col-6">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="checkbox" name="temporary-checkbox" aria-label="Checkbox for following text input">
</div>
Temporary
</div>
</div>
</div>
<br />
<div class="col-6">
<input type="submit" id="submit-button" class="btn btn-outline-primary" value="Submit" />
</div>
</form>
<br />
<div class="progress">
<div id="progressBar" class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
0%
</div>
</div>
<br />
<div class="alert alert-primary">
<strong>Temporary file</strong> will be available for 5 days.
</div>
<div class="alert alert-danger alert-dismissible fade show" id="danger-upload" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
The maximum size of file to upload is <strong>1Gib</strong>
</div>
<script type="text/javascript">
jQuery("#file-upload").change(function(){
if(this.files[0].size > 1000000000){
jQuery("#file-upload").val("");
}else{
$('#progressBar').attr('aria-valuenow', "0").css('width', "0" + '%').text("0" + '%');
}
});
$(document).ready(function() {
$('form').on('submit', function(event) {
event.preventDefault();
var formData = new FormData($('form#file-input')[0]);
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
xhr : function() {
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', function(e) {
if (e.lengthComputable) {
var percent = Math.round((e.loaded / e.total) * 100);
$('#progressBar').attr('aria-valuenow', percent).css('width', percent + '%').text(percent + '%');
}
});
return xhr;
},
type : 'POST',
url : '/uploadpage/submit',
data : formData,
processData : false,
success : function() {
alert('File uploaded!');
},
error : function(lala){
alert('File is Stuck \nError Code: ' + lala.status + ' ' + lala.statusText);
}
});
});
});
</script>
@endsection
和我的路线:
Route::post('/uploadpage/submit', 'FileController@submit');
编辑:这是我的文件控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\File;
use DateTime;
class FileController extends Controller
{
private $file, $submitted_file;
private $upload_link = "storage";
private function generateId($temporary){
$generated_string = '';
if($temporary == true)
$generated_string = '10';
else $generated_string = '90';
$generated_string = $generated_string.time();
return $generated_string;
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->file = $_SESSION["files"];
$this->submitted_file = $_SESSION["filetoup"];
$this->file->save();
$this->move($this->upload_link, $this->file->name);
}
public function submit(Request $request){
$this->file = new File();
$this->validate($request, [
'file-box' => 'required',
'temporary-checkbox' => 'nullable'
]);
$this->submitted_file = $request->file('file-box');
$this->file->name = $this->submitted_file->getClientOriginalName();
$this->file->type = $this->submitted_file->getClientOriginalExtension();
$this->file->size = $this->submitted_file->getSize();
$this->file->temporary = $request->input('temporary-checkbox');
$this->file->id = $this->generateId($request->input('temporary-checkbox'));
$_SESSION["files"] = $this->file;
$_SESSION["filetoup"] = $this->submitted_file;
return view('confirmpage')->with('files', $this->file);
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
我希望我会定向到我的下一条路线/uploadpage/submit
。
解决方案
推荐阅读
- c# - SqlBulkCopy 数据末尾有新行的问题
- c - 使用两个堆栈的 C BST 后序遍历
- c# - WPF 绑定到 gridview listview 按钮的可见性
- python - 带有 Plotly 的网络分析显示悬停和文本信息
- java - 我希望在 javaFX 中对齐复选框
- python - 聚合和透视数据框的更快替代方案?
- python - 带有 Plotly 和 Kaledio 的 Pyinstaller
- uwp - 如何解决 NumberBox 中忽略的 UpdateSourceTrigger
- python - 运行 tensorboard 命令时出现错误?
- css - 只有一些静态文件没有显示在 Django / Apache 堆栈上