• Avatar de ArnaudStavrou
    Membre depuis :
    20/01/2016
    Messages :
    31

    Bonjour,
    Je viens vers vous aujourd'hui, car je n'arriva pas à utiliser l'AJAX.

    Ce que je veux faire :
    À partir d'un select et dun input de type text, je récupère les données, puis je veux les transmettres à un controller via AJAX, pour remplir un autre champ du formulaire.

    Mon code :

    // Déclaration du CSRF TOKEN pour l'AJAX
    $.ajaxSetup({
    headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
    });

    // ici Ajax au CHANGEMENT DE QUANTITÉ SUR UNE LIGNE ARTICLE OU SUR LE SELECT REFERENCE
    // pour afficher le tarif correspondant du groupe
    function ajax_calcul_rate(){

    // recup de l'ID du group
    var group = $("#group_id").val();

    $('#new_devis input.qty, #new_devis select').change( function(event){

    // enregistrement des valeurs saisies dans les inputs
    var product = $(this).parents("tr").find("select").val();
    var qty = $(this).parents("tr").find("input.qty").val();

    if( product != 0 && qty != 0) {

    // ici DEVELOPPEMENNT AJAX
    $.post( "{{ action('AjaxController@priceProduct') }}",
    {
    "group": group,
    "product": product,
    "qty": qty
    },
    function(data) {
    alert(data);

    });
    }

    Et je me retrouve avec un erreur de type 500.

    Quelqu'un pourrait me mettre sur la piste, car j'ai essayé plein de chose, mais en vain.

    Merci d'avance pour votre aide.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1673

    Salut,

    Il faudrait avoir plus de précision sur l'erreur 500, que raconte le serveur au retour comme erreur ? Il faut utiliser les outils développement des navigateur pour voir précisément ce qui se passe.

  • Avatar de ArnaudStavrou
    Membre depuis :
    20/01/2016
    Messages :
    31

    Bonjour,
    J'ai fait quelques tests, et en changeant le post en get, cela fonctionne.
    Maintenant j'ai une erreur 405 pour methode non allouée, et une erreur :


    QueryException in Connection.php line 770:
    SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND group_id =' at line 4 (SQL:
    SELECT *
    FROM prices
    WHERE product_id =
    AND group_id =
    )

    il y a surement une histoire de paramètre a régler, mais je ne vois pas quoi.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1673

    Il faudrait un peu voir le code serveur.

  • Avatar de ArnaudStavrou
    Membre depuis :
    20/01/2016
    Messages :
    31

    declaration de la route :

    /*
    Appel AJAX
    */
    Route::get('/ajax/prix_produit', 'AjaxAdminController@priceProduct');

    Controller :

    <?php

    namespace App\Http\Controllers\Administrations;

    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\DB;

    class AjaxAdminController extends Controller
    {
    public function priceProduct(Request $request)
    {
    $product = $request->ref;
    $group = $request->group;
    $qty = $request->qty;
    $result = [];

    $price = DB::connection('mysql')
    ->select("
    SELECT
    FROM prices
    WHERE product_id = $product
    AND group_id = $group
    ");

    if(!isset($price[0])){
    $result[] = false;

    $price = DB::connection('mysql')
    ->select("
    SELECT

    FROM prices
    WHERE product_id = $product
    AND group_id = 1
    ");
    }else{
    $result[] = true;
    }

    if(isset($price[0])){
    if(!empty($price[0]->qtyE) && $price[0]->qtyE <= $qty){
    $result[] = $price[0]->priceE;
    }elseif(!empty($price[0]->qtyD) && $price[0]->qtyD <= $qty){
    $result[] = $price[0]->priceD;
    }elseif(!empty($price[0]->qtyC) && $price[0]->qtyC <= $qty){
    $result[] = $price[0]->priceC;
    }elseif(!empty($price[0]->qtyB) && $price[0]->qtyB <= $qty){
    $result[] = $price[0]->priceB;
    }elseif(!empty($price[0]->qtyA) && $price[0]->qtyA <= $qty){
    $result[] = $price[0]->priceA;
    }else{
    $result[] = "Pas de tarif";
    }
    }else{
    $result[] = "Pas de tarif";
    }

    return $result;
    }
    }

    et l'appel ajax :

    function ajax_calcul_rate(event){

    // recup de l'ID du group
    var group = $("input[name=group_id]").val();

    $('#new_devis input.qty, #new_devis select').change( function(event){

    // enregistrement des valeurs saisies dans les inputs
    var ref = $(this).parents("tr").find("select").val();
    var qty = $(this).parents("tr").find("input.qty").val();

    if( ref != 0 && qty != 0) {

    // cible l'input qui recoit la nouvelle valeur en base
    var input_price = $(this).parents("tr").find("input.price");

    // ici DEVELOPPEMENNT AJAX POUR ACTUALISER LE PRIX ..
    $.get( "{{ action('AjaxAdminController@priceProduct') }}",
    {
    "_token": "{{ csrf_token() }}",
    "group": group,
    "ref": ref,
    "qty": qty
    },
    function(data) {

    // determine si le prix est a jour ou non sur le groupe
    var valid = data[0];
    // retour des résultats Ajax de la base dans une variable, soit tarif group ou prix public HT
    var price = data[1];

    // on applique le nouveau prix dans l'input
    input_price.val(price);
    // on verifie si il est actualisé, pour appliquer un classe
    if( valid == false){
    input_price.addClass("no_tarif").attr("title", "Article sans tarif spécifique pour ce groupe client");
    }else{
    input_price.removeClass("no_tarif").removeAttr("title");
    }

    });

    }
    event.preventDefault();
    });
    }

    Merci de prendre du temps pour m'éclairer.

Vous ne pouvez pas répondre à ce sujet.