Laravel 7-jQuery-提交表单返回空白页面-不重新路由

时间:2020-10-03 16:46:59

标签: javascript php jquery laravel-7

我正在使用Laravel 7和Jquery,并且在我的表单上提交,而不是按照控制器或自定义javascript进行重定向或重新加载,而是返回空白页面。如果我使用json请求的回显,则会将其打印到屏幕上。我应该提到,数据确实已保存到数据库中。我正在按照最适合我的需求的方式学习教程,其链接可以在这里找到:https://www.youtube.com/watch?v=DRE7L8KvBw0&list=PLV1nl4kfrf6GexbVpqfQc8zjv4JLAhI4K&index=10 我应该被重定向,但做错了什么。任何帮助,将不胜感激。我使注释的代码可见,因此您可以看到我尝试过的一些内容。 这是exam_category.blade.php中的表格

<div class="modal-body">
        {{-- <form method="POST" action="{{ url('admin/add_new_category') }}" class="database_operation" data-ajax="false"> --}}
            <form method="POST" action="{{ url('admin/add_new_category') }}" class="database_operation">
            {{ csrf_field() }}
        {{ method_field('POST') }}
          <div class="row">
              <div class="col-sm-12">
                  <div class="form-group">
                      <label>Enter Category Name</label>

                      <input type="text" name="name" placeholder="Enter Category Name" class="form-control" required="required">
                  </div>
                  <div class="col-sm-12">
                    <div class="form-group">
                        {{-- <button type="submit" class="btn btn-primary">Add</button> --}}
                        <button class="btn btn-primary">Add</button>

                    </div>
                  </div>

              </div>
          </div>
        </form>
        </div>

AdminController.php AdminController的顶部

namespace App\Http\Controllers;

use App\Oex_category;
use Illuminate\Http\Request;
use Validator;

管理控制器内部的功能

public function exam_category()
    {
        return view('admin.exam_category');
    }

    public function add_new_category(Request $request)
    {
        $validator = Validator::make($request->all(), ['name' => 'required']);
        if ($validator->passes()) {
            $cat = new Oex_category();
            $cat->name = $request->name;
            $cat->status = 1;
            $cat->save();
            $arr = array('status' => 'true', 'message' => 'success', 'reload' => url('/admin/exam_category'));
        } else {
            $arr = array('status' => 'false', 'message' => $validator->errors()->all());
        }
        // echo json_encode($arr);
    }

custom.js

$(document).on("submit", ".database_operation", function() {
    let url = $(this).attr("action");
    let data = $(this).serialize();
    $post(url, data, function(fb) {
        let resp = $.parseJson(fb);
        if (resp.status == "true") {
            alert(resp.message);
            setTimeout(function() {
                window.location.href = resp.reload;
            }, 1500);
        }
    });
    return false;
});

注意:我在custom.js中运行了一些以前的测试,并且应用程序正在查找它。 最后,这是我的web.php

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');
Route::get('/admin', 'AdminController@index')->name('admin');
Route::get('/admin/exam_category', 'AdminController@exam_category')->name('exam_category');
Route::post('admin/add_new_category', 'AdminController@add_new_category');

提前感谢您查看我的代码。

1 个答案:

答案 0 :(得分:1)

所有路由和控制器都应返回一个响应,以将其发送回用户的浏览器。 Laravel提供了几种返回响应的方法。

只需将以下行添加到控制器的 add_new_category 方法的末尾

return response()->json([
    'status' => 'true', 
    'message' => 'success', 
    'reload' => url('/admin/exam_category')
  ]);

要使用响应访问数据,

response.data.status

有关响应的更多详细信息,请访问here

相关问题