Bonjour,
je suis en train de remplir un formulaire avec CakePHP. Je veux, au moment que je sélectionne un produit son prix s'affiche .
j'ai suit ce tutoriel http://www.webandcow.com/Page/Tutoriels/110/De-l-Ajax-avec-CakePHP-3-et-Handlebars#main-content
add.ctp
<fieldset>
<legend><?= __('Add Lignecommande') ?></legend>
<?php
echo $this->Form->input('commande_id',array('type'=>'text','label' => 'identifiant de la commande','value' => $this->request->session()->read('commande_id') ,'readonly' => 'readonly'));
// echo $this->Form->input('commande_id', ['options' => $commandes]);
echo $this->Form->input('produit_id', array('options' => $produits,
'label' => 'Produit',
'id'=>'produit_id',
'empty' => '----- Selectionner un produit -----',
'onchange'=>'selectProduit()'));
echo '<div id="prix_id" class="form-group" style="height: 52px;"><label class="col-md-9 col-md-offset-3"></label></div>';
// echo $this->Form->input('prixLigneCommande');
// echo $this->Form->input('tvaLigneCommande');
echo $this->Form->input('qteLigneCommande');
?>
</fieldset>
LignecommandeController
public function getPrix($idProduit)
{
// Si c'est une requête AJAX
if($this->request->is('ajax')) {
// Force le controller à rendre une réponse JSON.
$this->RequestHandler->renderAs($this, 'json');
// Définit le type de réponse de la requete AJAX
$this->response->type('application/json');
// Find pour récupérer les prix
$response = $this->Lignecommandes->Produits->find('list')->where('produit_id',$idProduit);
// Chargement du layout AJAX
$this->viewBuilder()->layout('ajax');
// Créer un contexte sites à renvoyer
$this->set('prix_s',$response);
// Généreration des vues de données
$this->set('_serialize', ['prix_s']);
}
}
test.js
$(document).ready(function() {
function selectProduit() {
var idProduit = $('#produit_id').val();
$('#prix_id').html('<div class="col-md-1 col-md-offset-6 control-label"><i class="fa fa-spinner fa-spin"></i></div>');
$('#select_prix').html('');
$.ajax({
url: varGlobaleRacine + 'Lignecommandes/getPrix/' + idProduit,
type: 'GET',
dataType: 'JSON',
success: function (response) {
prix_s = response.prix_s;
if(prix_s.length == 0){
$('#prix_id').html('<label class="col-md-9 col-md-offset-3">Aucun produit pour le moment</label>');
}else{
$('#prix_id').html(
'<label class="control-label col-md-3" for="produit_id">prix</label>' +
'<div class="col-md-9">'+
'<select name="prix_id" id="select_prix" class="form-control">' ;
$.each(prix_s, function( idProduit, prixLigneCommande ) {
$('#produit_id').append('<option value="' + idProduit + '" >' + prixLigneCommande + '</option>');
});
$('#prix_id').append(
'</select>' +
'</div>');
}
},
// En cas d'erreur, afficher le statut et l'erreur
error:function(jqXHR, textStatus, errorThrown){
alert(textStatus);
alert(errorThrown);
}
});
}
$('#produit_id').change(function(event) {
selectPrix();
});
});
quand je sélectionne un produit, malheuresement son prix ne s'affiche pas.
Merci d'avance pour votre aide.
bonne nuit[]()
Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(