如何使用ajax在laravel 5中发布表单?

时间:2015-09-08 21:36:21

标签: javascript php ajax laravel laravel-5

我在学习如何在laravel中制作一个ajax帖子时遇到了很多麻烦。我希望能够在验证后使用jquery显示错误但我不知道如何访问发送到我的控制器的对象;所以我甚至不知道控制器中的“返回”是什么。有人可以带我走过这个吗?

这是我观点的一部分

<meta name="_token" content="{{ csrf_token() }}" />            
<div class='row'>
        {!! Form::open(['url'=>'register','id'=>'sign-up','class'=>'col-md-6 col-md-push-4 form-horizontal'])!!}

            <div class='form-group'>
                {!! Form::label('first_name', 'First Name:',['class'=>'col-xs-12 col-md-3']) !!}
                <div class= 'col-xs-12 col-md-6'>
                    {!! Form::text('first_name', null, ['class' => 'form-control'])!!}
                </div>
            </div>
            <div class='form-group'>
                {!! Form::label('last_name', 'Last Name:',['class'=>'col-xs-12 col-md-3']) !!}
                <div class= 'col-xs-12 col-md-6'>
                    {!! Form::text('last_name', null, ['class' => 'form-control'])!!}
                </div>
            </div>
            <div class='form-group'>
                {!! Form::label('email', 'Email Address:',['class'=>'col-xs-12 col-md-3']) !!}
                <div class= 'col-xs-12 col-md-6 '>
                    {!! Form::text('email', null, ['class' => 'form-control'])!!}
    <div class='form-group'>
            {!! Form::label('password', 'Password:',['class'=>'col-xs-12 col-md-3']) !!}
                <div class= 'col-xs-12 col-md-6'>
                    {!! Form::password('password', null, ['class' => 'form-control'])!!}
                </div>
            </div>

                    <div class='form-group'>
            {!! Form::label('password_confirmation', 'Confirm Password:',['class'=>'col-xs-12 col-md-3']) !!}
                <div class= 'col-xs-12 col-md-6'>
                    {!! Form::password('password_confirmation', null, ['class' => 'form-control'])!!}
                </div>
            </div>
                    </div>  <div class='btn btn-small'>
                {!! Form::submit('Join Us!',['class'=>'btn btn-success btn-sm form-control'])!!}
            </div>

        {!! Form::close() !!}
        </div>

.js文件:

$(function(){

$('#sign-up').on('submit',function(e){
    $.ajaxSetup({
        header:$('meta[name="_token"]').attr('content')
    })
    e.preventDefault(e);

        $.ajax({

        type:"POST",
        url:'/register',
        data:$(this).serialize(),
        dataType: 'json',
        success: function(data){
            console.log(data);
        },
        error: function(data){

        }
    })
    });
});

控制器:

<?php 

namespace App\Http\Controllers;

use App\Http\Requests\CreateRegisterRequest;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\HttpResponse;
use Input;
class UserController extends Controller
{

    public function create(CreateRegisterRequest $request)
    {

    }

    public function show()
    {
        return view('user.profile');
    }

}

表格申请:

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class CreateRegisterRequest extends Request
{
    public function authorize()
    {
        return true;
    }
public function rules()
    {
        return [
            'first_name' =>'required',
            'last_name'=>'required',
            'url'=>'url',
            'description',
            'email'=>'unique:users,email|email',
            'password'=>'min:6|confirmed',
            'password_confirmation'=>'min:6'


        ];
    }
}

1 个答案:

答案 0 :(得分:13)

如果不查看任何代码,我可以告诉您执行此任务的方法。可能还有其他方法,但这通常是我开始使用Laravel后我接近它的方式。

  
    

我希望能够在验证后使用jquery显示错误,但我不知道如何访问发送到控制器的对象;所以我甚至不知道该怎么回事#39;在控制器中。

  

让我们首先将其分解为3个更简单的问题。

1。如何访问发送到我的控制器的对象?

好吧,在您的AJAX中,您可以选择发送GET或POST请求。约定规定您应该使用POST来更新模型,并使用GET从模型中检索。如果您正在使用REST,那么您可以使用其他方法(PUT,PATCH,DELETE等)。您可以自己了解有关这些内容的更多信息,但为了这个答案,我将通过GET和POST保持简单。

在您的示例中,您使用POST,所以让我们继续使用POST。您已经调用了JQuery serialize方法,因此您只需要这样做。在Laravel控制器中,只需为方法选择参数Request $request,Laravel方法$request->input()将为您提供请求中发送的所有参数的键/值数组。然后你可以相应地处理它们。

2。我应该在控制器中返回什么?

通常,您返回AJAX请求的JSON数据。它很容易解析,JavaScript和JQuery都有很好的对象可以为你解析JSON。

在Laravel控制器中,您可以在方法的末尾添加以下行以返回一些JSON:

return response()->json($data);

在此示例中,$data是一个包含要返回的JSON的数组。在PHP中,我们可以将JSON字符串表示为键/值对的数组,如下所示:

$data = [
    'success': true,
    'message': 'Your AJAX processed correctly'
];

通常,如果这是一个普通的旧PHP脚本,我们必须调用PHP的json_encode函数,但是Laravel会为我们处理这个,所以我们需要做的就是传递数组。出于调试目的,您可能希望使用JSON_PRETTY_PRINT常量,如果直接访问URL,它将在屏幕上很好地输出JSON:

return response()->json($data, 200, [], JSON_PRETTY_PRINT);

3。如何从控制器访问发送的对象?

好了,既然你的响应是一个简单的JSON字符串,你可以使用任何内置的JavaScript方法来解析JSON。我通常使用JSON.parse(json),其中json是控制器返回的JSON字符串。有关详细信息,请参阅here

4。那么,我该如何获得这些数据呢?

好吧,看起来你可能已经想到了这一点,但为了确保我会澄清。您需要注册到控制器的路由。然后,您可以使用JQuery AJAX对象简单地调用该URI,然后注入的变量data将是从控制器返回的任何内容,在本例中为JSON字符串。