簡體   English   中英

Laravel 5.1 Ajax無法正常工作?

[英]Laravel 5.1 ajax not working?

我正在嘗試在laravel中使用Ajax提交登錄表單,但似乎是Ajax部分無法正常工作。 下面是我的login.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 

</head>
<body>


<div class="secure">Secure Login form</div>
{!! Form::open(array('url'=>'account/login','method'=>'POST', 'id'=>'myform')) !!}
<div class="control-group">
  <div class="controls">
     {!! Form::text('email','',array('id'=>'','class'=>'form-control span6','placeholder' => 'Email')) !!}
  </div>
</div>
<div class="control-group">
  <div class="controls">
  {!! Form::password('password',array('class'=>'form-control span6', 'placeholder' => 'Please Enter your Password')) !!}
  </div>
</div>
{!! Form::button('Login', array('class'=>'send-btn')) !!}
{!! Form::close() !!}



<script type="text/javascript">
$(document).ready(function(){
  $('.send-btn').click(function(){ 
$val=$('input[name=email]').val();  
$token=$('input[name=_token]').val();
//alert($val+$token);
   $.ajax({
      url: '/account/login',
      type: "post",

      data: {'email':$('input[name=email]').val(), '_token': $('input[name=_token]').val()},
      success: function(data){
        alert(data);
      }
    });  


  }); 
});
</script>

route.php

Route::get('account/login', function() {
  return View::make('login');
});
Route::post('account/login', 'AccountController@login');

在控制器中

 public function login() {

    if(Request::ajax()) {
      $data = Input::all();
      print_r($data);

      die;
    }

    }

我曾嘗試在成功之前在ajax部分中警告輸入值,它將打印輸出,但成功警告將無法工作。

盡管通過AJAX登錄用戶是不安全的,但是仍然可以這樣做:

{!! Form::open(array('url'=>'account/login','method'=>'POST', 'id'=>'myform')) !!}
    /**
     * Your Form
     */
    ...
    {!! Form::submit('Login', array('class'=>'send-btn')) !!}
{!! Form::close() !!}

CSRF字段將自動為您生成。 JavaScript部分:

<script>
    (function($) {
        $('#myform').submit(function(e) {
            $.ajax({
                type: 'POST',
                url: 'account/login',
                data: $('#myform').serialize(),
                success: function(data) {
                    alert(data);
                }
            });

            e.preventDefault();
        });            
    })(window.jQuery);
</script>

這應該可以解決HTML和JavaScript部分的問題。 在Laravel 5.1中,我們可以利用方法注入來接收Input字段( Request Object ),如下所示:

<?php

namespace Blah\Blah;

use Illuminate\Http\Request;

class AccountController
{
    ...

    public function login(Request $request)
    {
        if ($request->ajax()) {
            // Its AJAX!!
            return $request->all(); // All the Input fields
        }
    }
}

注意我對您的代碼所做的更改。 請檢查此方法是否有效。

干杯!

試試這個:

public function login() {

if(Request::ajax()) {
  $data = Request::all();
  return $data;

       }
}

令牌是必需的。 嘗試添加:

標頭:{'X-CSRF-TOKEN':令牌}

在您的ajax請求中:

$.ajax({
    url: route,
    headers: {'X-CSRF-TOKEN': token},
    type: 'POST',
    dataType: 'json',
    data: {data : data}
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM