php - 重定向后视图不更新
问题描述
我正在使用 Laravel 开发一个简单的购票应用程序。
在用户选择要购买的门票后,我无法更新视图,无论我在 ajaxRequestPost 中使用什么类型的重定向都无关紧要,视图仍然停留在/而不是重定向到payment /{id}。
但是,我确实收到了文件 payment.index 的返回,但视图没有更新为返回的内容。
BitBucket 代码:https ://bitbucket.org/naimrahidin/laravel_ticketing/src/master/
路线/web.php
Route::resource('/', 'TicketController');
Route::post('createOrder', 'OrderController@ajaxRequestPost');
Route::get('/payments/{id}', 'PaymentController@show');
票务控制器.php
public function index(){
$tickets = Ticket::all();
return view('tickets.index', compact('tickets'));
}
订单控制器.php
public function ajaxRequestPost(Request $request)
{
$input = $request->all();
for($i = 1; $i < 4; $i++){
if($input['ticket_'.$i.'_q'] != 0) {
$spkAdmin = new Order();
$spkAdmin->ticket_id = $i;
$spkAdmin->quantity = (int)$input['ticket_'.$i.'_q'];
$spkAdmin->total = (int)$input['ticket_'.$i.'_t'];
$spkAdmin->user_id = $input['user_id'];
$spkAdmin->save();
$orders = array(
'id' => $i,
'quantity' => (int)$input['ticket_'.$i.'_q'],
'total' => (int)$input['ticket_'.$i.'_t']
);
}
}
return redirect()->action(
'PaymentController@show', ['id' => $input['user_id']]
);
}
支付控制器.php
public function show($id)
{
$orders = DB::table('orders')->where('user_id', $id)->get();
return view('payments.index', ['orders' => $orders]);
}
付款/index.blade.php
@extends('base')
@section('main')
<div class="row">
<div class="col-sm-12">
<h1 class="display-3">Payments</h1>
<h3 class="display-5" data-user-id="1">Naim Rahidin</h3>
<table class="table table-striped">
<thead>
<tr>
<td>Ticket ID</td>
<td>Quantity</td>
<td>Total</td>
</tr>
</thead>
<tbody>
@foreach($orders as $order)
<tr>
<td>{{$order->ticket_id}}</td>
<td>{{$order->quantity}}</td>
<td>{{$order->total}}</td>
</tr>
@endforeach
</tbody>
</table>
<div class="order_detail">
<p>Total: RM <span id=grand_total>0</span></p>
<p id="proceed" class="btn btn-primary">Checkout</p>
</div>
</div>
</div>
@endsection
解决方案
想出了这个问题的答案。
由于我通过 Ajax 调用 createOrder,OrderController 应该将呈现的视图作为响应发送,并且在 ajax.success 应该替换 html。
在 OrderController.php 中添加
$html = view('payments.index')->render();
$response = response()->json(['success' => true, 'html' => $html]);
return $response;
阿贾克斯
success: function(data) {
$('.container').html(data.html);
}
推荐阅读
- javascript - 如何在父函数中获得异步结果?打字稿
- android - 无法解析 Intent robolectric ActivityScenarioRule 的活动
- json - 如何使用jq在json文件中过滤子对象中的某些数组
- c# - HttpListener:监听具有显式主机名的端口(无顶级通配符)
- stream - 如果使用 MemoryStream 而不是 FileStream,则 HttpResponseMessage 始终为空
- javascript - JS CountDown 刷新时请不要重新加载
- google-maps - System.Reflection.TargetInvocationException:调用的目标已引发异常。发生了
- android - 谷歌地图显示在活动顶部的片段上
- laravel - 如何为表a的每个数据计算表a数据
- sql - 如何设计一个不可变的仅附加数据库?