【发布时间】:2020-08-31 01:07:49
【问题描述】:
我有两条路线:
Route::get('/download/{hash}','DownloadController@exists')->name('exists');
Route::post('/download/{hash}','DownloadController@verify')->name('verify');
程序:
基本上用户输入URL,例如localhost/download/56iq45agosasa 调用第一条路由并显示download.blade.php 视图。有一个表单,用户必须输入密码,当点击提交按钮时,ajax 请求被发送到第二个(post)路由。
DownloadController@verify 返回 json,但在空白窗口中显示(见屏幕截图)但它应该在 download.blade.php 视图中返回。
不知何故表单消失了,ajax成功函数没有被调用。
代码 sn-ps 下载.blade.php:
@section('content')
<div class="container-fluid mt-5">
<div class="row justify-content-md-center">
<div class="col-md-4">
<form method="POST">
<label for="uploadPassword">Password</label>
<input type="password" name="password" class="form-control" id="uploadPassword" placeholder="Password" required="">
<button id="btn-submit" type="submit" class="btn btn-success mt-2">Submit</button>
{{ csrf_field() }}
</form>
</div>
</div>
</div>
@endsection
@push('scripts')
<script type="text/javascript">
$(".btn-submit").click(function(e){
e.preventDefault();
let password = $("input[name=password]").val();
$.ajax({
type:'POST',
url:"",
data:{
password:password
},
success:function(data){
console.log("I don't get shown");
//alert(data.success + " " + data.matches);
}
});
});
</script>
@endpush
下载控制器:
class DownloadController extends Controller
{
public function exists(Request $request, $hash)
{
// Some private mysql queries
// Return the hash to the download view
return view('download',[
'hash' => $hash
]);
}
public function verify(Request $request, $hash)
{
return response()->json(
['success'=>'Got Simple Ajax Request.']
);
}
}
【问题讨论】:
-
如果
@push('scripts')推送到页面顶部的脚本,您应该将该脚本包装在$(document).ready(function () { ... });中,以确保您在实际存在的时候附加监听器。此外,表单提交处理程序通常是更好的做法,因为在某些情况下无需单击提交即可提交表单 -
好的,谢谢!所以;我应该删除提交侦听器上的按钮(停用它)并添加一个表单提交侦听器吗?
-
是的。这样,您还可以捕获某人输入密码并按 {enter},这是一种常见的操作
-
@apokryfos 效果很好!非常感谢。由于您帮我解决了,如果您想写一个简短的答案,以便我将其标记为正确!
标签: javascript php ajax laravel