I'm developing an application with laravel 5, and sent the information by AJAX, but if I want to display error messages generated by FormRequest ? because in the browser console in Network -> preview can see that error message
My FormRequest CreateRequest
<?php
namespace Cinema\Http\Requests;
use Cinema\Http\Requests\Request;
class CreateRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'genre' => 'required',
];
}
}
My Controller:
<?php
namespace Cinema\Http\Controllers;
use Illuminate\Http\Request;
use Cinema\Http\Requests;
use Cinema\Http\Requests\CreateRequest;
use Cinema\Http\Controllers\Controller;
class GenreController extends Controller
{
public function store(CreateRequest $request)
{
if ($request->ajax())
{
return response()->json([
'petition' => $request->all()
],200);
}
}
}
My petition AJAX:
$("#registro").click(function(){
var data = $("#genre").val();
var route = "http://localhost:8000/genero";
var token = document.getElementById('token').value
$.ajax({
url: route,
headers: {'X-CSRF-TOKEN': token},
type: 'POST',
dataType: 'json',
data: {data : data},
});
});
And i can see the message error in the console:
But how can display? , Thanks :D
Just for test purpose - have an empty div in your view with an id of result:
<div id="result"></div>
Try this bit of code on ajax .fail:
.fail(function(data) {
var errors = data.responseJSON;
var displayErrors = '<ul>';
$.each( errors, function( key, value ) {
displayErrors += '<li>' + value[0] + '</li>';
});
displayErrors += '</ul>';
$('#result').html(displayErrors);
});
Like I said in the beginning - You can change the #result div to where you want the errors to be displayed.
Your controller..
<?php
namespace Cinema\Http\Controllers;
use Illuminate\Http\Request;
use Cinema\Http\Requests;
use Cinema\Http\Requests\CreateRequest;
use Cinema\Http\Controllers\Controller;
class GenreController extends Controller
{
public function store(CreateRequest $request)
{
if ($request->ajax())
{
return response()->json([
'petition' => $request->all(),
'success' => true // Add this line as a success flag
],200);
}
}
}
And your ajax..
$("#registro").click(function(){
var data = $("#genre").val();
var route = "http://localhost:8000/genero";
var token = document.getElementById('token').value
$.ajax({
url: route,
headers: {'X-CSRF-TOKEN': token},
type: 'POST',
dataType: 'json',
data: {data : data},
success: function(data){
if(typeof data.success === "undefined"){
var errors = data.responseJSON;
var displayErrors = '<ul>';
$.each( errors, function( key, value ) {
displayErrors += '<li>' + value[0] + '</li>';
});
displayErrors += '</ul>';
$('#result').html(displayErrors);
}
}
});
});
And like the previous answer you can add a div element where you want to show your validation errors.
<div id="result"></div>