Come faccio a pubblicare un modulo in laravel 5 utilizzo di ajax?

Sto avendo un sacco di problemi a imparare come fare un ajax post in laravel. Voglio essere in grado di mostrare gli errori usando jquery, dopo la convalida, ma non ho idea di come accedere l’oggetto inviato per il mio controller; in modo che io non so nemmeno cosa ‘ritorno’ nel controllore. Per favore qualcuno può camminare me attraverso questo?

Questa è una parte del mio punto di vista

<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 file:

$(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){

        }
    })
    });
});

controller:

<?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');
    }

}

Modulo Di Richiesta:

<?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'


        ];
    }
}

OriginaleL’autore jackjoesmith | 2015-09-08

One Reply
  1. 13

    Senza guardare qualsiasi codice, posso dirvi che il mio modo di esecuzione di questa operazione. Ci possono essere altri modi, ma questo è, in generale, come mi sono avvicinato da quando ho iniziato a usare Laravel.

    Voglio essere in grado di mostrare gli errori usando jquery, dopo la convalida, ma non ho idea di come accedere l’oggetto inviato per il mio controller; in modo che io non so nemmeno cosa ‘ritorno’ nel controllore.

    Iniziamo a rompere questo giù in 3 semplici domande.

    1. Come faccio ad accedere all’oggetto inviato per il mio controller?

    Bene, nel tuo AJAX è possibile scegliere di inviare una richiesta GET o POST. Convenzione afferma che non si dovrebbe usare il POST per l’aggiornamento del modello e per il recupero dal modello. Se si utilizza RESTO, allora avete altri metodi per rendere l’uso di INSERIRE, AGGIORNARE, CANCELLARE, etc). Si può imparare di più su questi, ma per il bene di questa risposta che mi mancherà di tenere le cose semplici solo con GET e POST.

    Nel tuo esempio è l’uso POST, quindi cerchiamo di andare con quello. Hai già chiamato il JQuery serialize metodo, in modo che tutto ciò che è necessario fare. Nel Laravel controller, basta prendere l’argomento Request $request per il metodo, e il Laravel metodo $request->input() vi darà una chiave/valore di array di tutti i parametri inviati nella richiesta. È quindi possibile gestirli di conseguenza.

    2. Cosa dovrei tornare nel controller?

    In genere restituire dati JSON per una richiesta AJAX. È facile da analizzare, e sia JavaScript e JQuery sono bello oggetti per il parsing JSON per voi.

    Nel Laravel controller, è possibile aggiungere la seguente riga alla fine del tuo metodo per tornare un po ‘ di JSON:

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

    In questo esempio, $data è un array contenente il JSON che si desidera tornare. In PHP, siamo in grado di rappresentare una stringa JSON come un array di chiave/valore coppie, in questo modo:

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

    In genere, se questo fosse un semplice script PHP, ci sarebbe da chiamare PHP json_encode funzione, ma Laravel gestisce questo per noi, quindi tutto quello che dobbiamo fare è passare la matrice. Per scopi di debug, è possibile che si desidera utilizzare il JSON_PRETTY_PRINT costante, che sarà in uscita il JSON bene sullo schermo se si accede direttamente l’URL:

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

    3. Come faccio ad accedere all’oggetto inviato dal mio controller?

    Bene, ora che la tua risposta è una semplice stringa JSON, è possibile utilizzare qualsiasi del costruito in JavaScript metodi per l’analisi di JSON. Io in genere uso JSON.parse(json), dove json è la tua stringa JSON restituito dal controllore. Vedere qui per ulteriori dettagli.

    4. Così, come faccio a ottenere questo tipo di dati?

    Bene, sembra che probabilmente già avete questo capito, ma solo per essere sicuri che vorrei chiarire. È necessario registrare il percorso per il vostro controller. Quindi, si può semplicemente chiamare che URI utilizzando JQuery AJAX oggetto e poi iniettato variabile data sarà tutto ciò che era tornato dal controller, in questo caso una stringa JSON.

    Grazie! Ho un po ‘ migliore comprensione di questo ora 🙂
    Contento di aver potuto aiutare. So che non è un “ecco il codice inserire la spina e andare a” tipo di risposta, ma penso che in questo modo è meglio, perché ora sapete la procedura generale e spetta a voi per capire le specifiche 🙂 Buona fortuna!
    Sì, sono stato in grado di creare un oggetto con l’ajax con questa mini lezione haha. Ora sto cercando di visualizzare gli errori…
    Perché non rendere la vostra segnalazione di errore di un file JSON di risposta? In questo modo è possibile restituire un codice di errore, un messaggio e una descrizione, o qualsiasi altro numero di informazioni utili.
    $oggetto di richiesta contiene i messaggi di errore, e quindi dovrei essere in grado di tornare come risposta e analizzarlo con diritto di javascript?

    OriginaleL’autore samrap

Lascia un commento