【问题标题】:Laravel 5.1 ajax not working?Laravel 5.1 ajax 不工作?
【发布时间】:2015-08-12 04:21:38
【问题描述】:

我正在尝试在 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>

路由.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 请求是否使用 X-Requeted-With 标头发送?如果不是,那么 Request::ajax() 将失败
  • @MarounBaydoun。我关注了tutsnare.com/post-data-using-ajax-in-laravel-5 这个教程。我是 laravel 的新手
  • 在浏览器控制台中检查服务器响应,看看发生了什么错误
  • 在提交表单时检查是否有任何错误(使用 firebug)。
  • @MarounBaydoun,yes .console 错误说密码字段出现在不安全的 (http://) 页面上。这是一种安全风险,会导致用户登录凭据被盗。[了解更多]

标签: javascript php ajax laravel laravel-5.1


【解决方案1】:

虽然通过 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 中,我们可以利用方法注入来接收输入字段 (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
        }
    }
}

请注意我对您的代码所做的更改。请检查此方法是否有效。

干杯!

【讨论】:

    【解决方案2】:

    试试这个:

    public function login() {
    
    if(Request::ajax()) {
      $data = Request::all();
      return $data;
    
           }
    }
    

    【讨论】:

    • 抱歉,Laravel 5 删除了 Input::all();
    • 尝试安装它来帮助调试:github.com/barryvdh/laravel-debugbar - 真的很棒。因为你有 500 个内部。
    • 如果您收到 HTTP 500 错误,您需要查看服务器日志是什么原因造成的。我们没有玻璃球。
    • 运行此代码返回什么 kopy.io/xcGmA opps 我忘记在返回 Response::json($array) 行中输入分号,通过此返回 Response::json($array); 进行更正跨度>
    • in Auth Middleware is set if ($request->ajax()) kill it.
    【解决方案3】:

    令牌是必需的。尝试添加:

    标头:{'X-CSRF-TOKEN': 令牌}

    在您的 ajax 请求中:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-03
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 2016-01-24
      • 2015-09-10
      • 1970-01-01
      相关资源
      最近更新 更多