如何从控制器中的laravel中的Ajax请求中提取特定数据

时间:2017-07-31 07:05:20

标签: laravel

我正在使用laravel 5.4,我已经从视图中发出了一个AJAX请求然后通过路由路由它然后我在控制器上获取数据但是采用以下格式:

POST /login HTTP/1.1 Accept: application/json, text/javascript, */*; q=0.01 
Accept-Encoding: gzip, deflate Accept-Language: en-GB,en;q=0.8,en-
US;q=0.6,la;q=0.4,de;q=0.2 Connection: keep-alive Content-Length: 212 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Cookie: XSRF-TOKEN=eyJpdiI6Ild3MlNjSkNyYTl1TmxqWGE2bldIXC9RPT0iLCJ2YWx1ZSI6ImZYNFpIcWZyOURCVm9wdG11aWFwa2ZcLzJNdFdmZm9DRjVEZ1pqQ1AzbzhTRWpQTTh2NmZZc2pZTjB2TFUyZ3BDU2hHbXlCZXdoOEgzRHZsdXBLWTUyZz09IiwibWFjIjoiMDZkNGExOTBhZTgzNGNmMzNlZTEyMzExMWEwOTk3NzEwYWNiOTc5MGJlYzc2YzVhODJjNzMyMGVkN2M2NjE5NiJ9; laravel_session=eyJpdiI6IkVpaW1vZ0NKbjVnYWJDK0N2Ukh1OEE9PSIsInZhbHVlIjoia3Jkd1dHWjRhcml3Slp3UjZUa25VZ1RKdmt3cVl2T01LSmdVS0dsbW5Dc1IwcTB4bFRZdFA0RjBPdlBCaVFPaEtYaU1uYXB2Sm5yNmhNN3g5MW9TS3c9PSIsIm1hYyI6ImQ2ZDhiM2ExYmEyMDE0MDg3NGM1NjM5NDMxNDdjYWExODgyYzc4NmE3YjIyYjUzNTdhOWJmNDk3ZmRmZTI4YjYifQ%3D%3D Host: www.hms.com Origin: http://www.hms.com Referer: http://www.hms.com/ User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 X-Csrf-Token: CqeOgqQt05Oplb1HTnlCygkDzV0fFFiqWvBZ2r2j X-Requested-With: XMLHttpRequest data%5B0%5D%5Bname%5D=_token&data%5B0%5D%5Bvalue%5D=CqeOgqQt05Oplb1HTnlCygkDzV0fFFiqWvBZ2r2j&data%5B1%5D%5Bname%5D=username&data%5B1%5D%5Bvalue%5D=admin&data%5B2%5D%5Bname%5D=password&data%5B2%5D%5Bvalue%5D=admin

我想提取username & password我应该如何实现它?

这是我的路线代码:

Route::post('/login', 'LoginController@login');

这是我的控制器代码我得到ajax请求:

<?php

namespace App\Http\Controllers;

// use Illuminate\Http\Request;
// use Request;
use Illuminate\Http\Request;

class LoginController extends Controller
 {
    protected $redirectTo = '/home';

    public function __construct()
        {
            $this->middleware('guest')->except('logout');
        }

    public function login(Request $request)
        {
            return $request;
        }
}

这是我的ajax代码:

    $(document).ready(function()
    {
        $("#btnLogin").click(function()
            {
                // var form = new FormData($('.login-form')[0]);

                var data = [];
                var splittedFormData = $(".login-form").serialize().split('&');

                $.each(splittedFormData, function (key, value)
                    {
                        item = {};
                        var splittedValue = value.split('=');               
                        item["name"] = splittedValue[0];
                        item["value"] = splittedValue[1];
                        data.push(item);
                    });

                $.ajax({
                            url: '/login',
                            type: 'POST',
                            dataType: 'JSON',
                            data: {data},
                        })
                .done(function(resp){
                    console.log(resp);
                })
                .fail(function(resp){
                    console.log(resp);
                })
                .always(function(resp){
                    console.log(resp);
                });
            });
    });

如何提取数据?

4 个答案:

答案 0 :(得分:4)

你是否有理由因为不使用帖子的标准行为而让自己变得更复杂?你可以发送

$.ajax({
        url: '/login',
        type: 'POST',
        dataType: 'JSON',
        data: $(".login-form").serialize(),
 }) 

在服务器端,您可以使用

$email = $request->get('email');
$password = $request->get('password');

答案 1 :(得分:-1)

 public function login(Request $request)
        {
            return $request->all();
        }

答案 2 :(得分:-1)

根据您的代码,您需要循环并获取“用户名”和“密码”数据,如:

$userName = '';
$password = '';
foreach($request->data as $reqKey => $reqData){
    //For username
    if($reqData[$reqKey]['name'] == 'username'){
        $userName = $reqData[$reqKey]['value'];
    }

    //For password
    if($reqData[$reqKey]['name'] == 'password'){
        $password = $reqData[$reqKey]['value'];
    }
}

现在,您可以使用$userName$password进行下一步操作......

答案 3 :(得分:-1)

试试这个:

public function login(Request $request){
  $re =['username'=>'', 'password'=>''];
  if($request->has(['username', 'password'])){
    $username = $request->username;
    $password = $request->password;

    //Here you can use $username and $password

    $re =['username'=>$username, 'password'=>$password];
  }
  return response()->json($re);
}

请参阅本教程,了解Laravel请求和检索输入数据:

http://coursesweb.net/laravel/requests#anc_rin