首页 > 解决方案 > window.location.replace 不工作 Laravel ajax

问题描述

我是laravel的初学者。我使用 laravel Ajax 制作了自定义登录表单。当输入用户名和密码并单击登录按钮时,它成功访问 test.blade.php 页面,但页面显示 404 Not Found 到目前为止我附在下面的内容。

test.blade.php

<div class="container">
    <table width="100%" height="100%" border="0" cellspacing="0" align="center">
        <tr>
            <td align="center" valign="middle">
                <table class="table-bordered" width="350" border="0" cellpadding="3" cellspacing="3" bgcolor="#FFFFFF">
                    <form name="frm_login" id="frm_login">
                    @csrf
                          <tr>
                              <td height="25" colspan="2" align="left" valign="middle" bgcolor="#FF9900" class="style2">
                                  <div align="center">
                                      <strong>Login</strong>
                                  </div>

                              </td>
                          </tr>

                        <tr>

                            <div id="err" style="color: red">


                            </div>

                        </tr>


                        <tr>
                            <td width="118" align="left" valign="middle" class="style1">Username</td>
                            <td width="118" align="left" valign="middle" class="style1">
                                <input type="text" class="form-control" size="10px" id="username" placeholder="Username" name="username">
                            </td>

                        </tr>

                        <tr>
                            <td width="118" align="left" valign="middle" class="style1">Password</td>
                            <td width="118" align="left" valign="middle" class="style1">
                                <input type="password" class="form-control" size="10px" id="password" placeholder="password" name="password">
                            </td>

                        </tr>

                       

                        <tr>
                            <td colspan="2" align="right" valign="middle" class="style1">

                                <button type="button" class="btn btn-primary" onclick="login()">Sign In</button>
                                <button type="button" class="btn btn-warning" onclick="reset()">Reset</button>
                                </td>


                        </tr>






                    </form>
                </table>

            </td>


        </tr>


    </table>





</div>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
<script src="//cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>




<script>

    function login()
    {
        if($('#username').val() == "")
        {
            $('#username').parent('td').addClass('has-error');
            return false;
        }
        else if($('#password').val() == "")
        {
            $('#password').parent('td').addClass('has-error');
            return false;
        }
        else if($('#utype').val() == "")
        {
            $('#utype').parent('td').addClass('has-error');
            return false;
        }
        var data = $("#frm_login").serialize();

        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });




        $.ajax({
                type : 'POST',
                url: '{{ route('testlogin.check') }}',
                data : data,

            success : function(response)
            {
                console.log(response);
                if(response == 1)
                {
                    window.location.replace('test.blade.php');
                }
                else if(response == 3)
                {
                    $("#err").hide().html("Username or Password or Role Incorrect. Please Check").fadeIn('slow');
                }
            }

        });
    }

</script>

测试控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestloginController extends Controller
{
    public function index()
    {
        return view('testlogin');
    }

    public function check(Request $request)
{  
    $user = $request->username;
    $pass  = $request->password;

    if (auth()->attempt(array('name' => $user, 'password' => $pass)))
    {
        return response()->json([ [1] ]);
    } 
    else
     {  
        return response()->json([ [3] ]);
     }  
}

    public function logout(Request $request) 
    {
        Auth::logout();
        $request->session()->flush();
        return redirect()->route('student.login');
    }
}

路线

Route::get('/test','TestloginController@index');
Route::post('/test/check','TestloginController@check')->name('testlogin.check');

Route::get('/test','TestloginController@index')->name('testlogin.login');

标签: phplaravel

解决方案


我检查了你的代码。您必须仅更改控制器中称为“检查”的操作(功能)。请更改为:

public function check(Request $request)
    {
        $credentials = $request->only('username', 'password');

        if (\Auth::attempt($credentials)) {
            return response()->json([[1]]);
        } else {
            return response()->json([[3]]);
        }
    }

之后你必须看

            window.location.replace('test.blade.php');

改成

window.location.replace('{{route("your destination route name"}}');

推荐阅读