J'insère des enregistrements dans une table en utilisant jQuery ajax. Cela fonctionne très bien et renvoie un message flash qui notifie que l'enregistrement a été inséré avec succès. Maintenant, mon problème est après que l'enregistrement a été inséré, je ne sais pas comment recharger ma table afin que les changements peuvent être reflétés.Comment recharger une vue dans laravel après insertion avec JQuery Ajax
Remarque J'insertion par un modal bootstrap sur la même page de la table se trouve.
C'est le contrôleur qui retourne mes dossiers:
public function index()
{
//
$subjects = Subject::all();
return view('subjects.show', compact('subjects'));
}
Après les enregistrements sont de retour c'est ainsi que je l'afficher:
<table class="table table-responsive table-hover table-condensed table-bordered">
<thead>
<tr>
<th>Name</th>
<th>Level</th>
<th colspan="2">Actions</th>
</tr>
</thead>
<tbody>
@foreach($subjects as $subject)
<tr>
<td>{{$subject->name}}</td>
<td>{{$subject->level}}</td>
<td>
<a data-toggle="tooltip" title="Edit" href="#" role="button"><i class="glyphicon glyphicon-edit text-info"></i></a>
</td>
<td>
<a data-toggle="tooltip" title="Edit" href="#" role="button"><i class="glyphicon glyphicon-trash text-danger"></i></a>
</td>
</tr>
@endforeach
</tbody>
</table>
C'est mon script d'insérer l'enregistrement:
$(document).on('submit', '#subject-form', function(event) {
event.preventDefault();
/* Act on the event */
var name = $('#name').val();
var level = $('#level').val();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type: "POST",
url: $("#subject-form").attr('action'),
data: {name: name, level: level},
success: function(response) {
console.log(response);
if (response.success) {
$.notify({
icon: 'glyphicon glyphicon-check',
message: response.success
},{
type: 'info',
timer: 4000,
offset: 20,
spacing: 10,
z_index: 1031,
delay: 5000,
placement: {
from: "bottom",
align: "right"
},
animate: {
enter: 'animated fadeInDown',
exit: 'animated fadeOutUp'
},
});
} else {
// display error
}
$('#subject-modal').modal('toggle');
}
});
Ceci est la méthode du contrôleur qui insère l'enregistrement et génère une réponse flash:
public function store(Request $request)
{
//
//return json_encode(request('name'));
$response = array();
if (Subject::create(request(['name', 'level']))) {
$response['success'] = '<b>'.request('name').'</b>'.' created successfully';
} else {
$response['fail'] ='Error creating subject: <b>'.request('name').'</b>'.'. Try again, if problem persist contact administrator';
}
return \Response::json($response);
}
Y a-t-il des façons de faire fonctionner ce système? Appréciez les commentaires et les suggestions. Merci!!!
Pourquoi ne pas simplement appeler window.location.reload() en JavaScript? Sinon, vous devez actualiser le contenu HTML dans le navigateur. Ajax est capable de fournir ce contenu aussi. – btl
@btl window.location.reload() recharge la page mais ne fonctionne pas fermera ma boîte de dialogue et affichera mon message flash. Comment puis-je actualiser le contenu html? –
Effectuez une requête AJAX et renvoyez les nouvelles données avec la réponse de retour() -> json ($ reponse) ;. Ensuite, dans le rappel de succès, ajoutez les données à votre document HTML. – btl