Bonjour,

Voila je rencontre un petit problème avec mon code. J'essaie d'envoyer un valeur en même temps que je fais ma redirection.

var ref = $(this).closest('span').attr("data-ref-cust");

if(action == 'mhs') {

        action = 'pending_form_mhs.php';
    $.ajax({
        type: "POST",
        url: action,
        data : { ref: ref },
        success:function() {
            window.location.replace(action);
        },
        error: function(){
            alert('error');
        }
    });
}

Alors je récupère ma valeur "ref" puis je l'envoie dans une requête ajax et je fais une redirection. Mon code marche à ceci près que je ne reçois rien de l'autre coté. Je click sur mon bouton et je suis redirigé.

J'ai fait des test comme suit sur ma page d'arrivée:

if(empty($_POST['ref'])){
    echo "no ref";
}

if(empty($_POST['action'])){
    echo "no action";
}

Je dois avoir faire une erreur toute bête désolé mais je débute un peu. Merci pour votre réponse.

9 réponses


saibe
Réponse acceptée

yop,
bon je ne suis peut-être pas à jour dans Datatable mais tu dois avoir l'option 'drawCallback'.
grâce à cette option tu peux définir les évents sur ton table. avec ta méthode on('click') c po bon (ça peut fonctionner, mais si tu as plusieurs pages, ce sera plutôt galère à gérer) donc j'imaginerais un truc du genre :

var table = $('#example').DataTable( {
                    "sDom": "<'dt-toolbar'<'col-xs-12 col-sm-6'f><'col-sm-6 col-xs-12 hidden-xs'l>r>"+
                        "t"+
                        "<'dt-toolbar-footer'<'col-sm-6 col-xs-12 hidden-xs'i><'col-xs-12 col-sm-6'p>>",
                    "ajax": {type: "POST",
                            url: "scripts/customers_json.php",
                            data: {type: 'fetch'},
                            async: false,
                        },
                     "drawCallback" : function(){eventsSurMonTable('#example');},
                        .........

et la function qui va bien :

function eventsSurMonTable(idTable){
  $(idTable + ' tr').click(function(){ // ou autre
        // pour faire apparaitre les détails
  });

    $(idTable + ' btn').click(function(){
        var action = $(this).attr("data-ref-action");
        var ref = $(this).closest('span').attr("data-ref-cust");
        switch(action){
            case 'mhs' :
                window.location('pending_form_mhs.php?ref:' + ref + ')';
            break;

            case 'fdc' :
                ...
            break;
            ....

        }
    }
}

et comme je te le disais plus haut, tu récupères un $_GET et pas un $_POST.
pas besoin d'ajax...

hello,
ce n'est pas une erreur de code, mais de logique ;)
tu appelles ton fichier "pending_form_mhs.php" en ajax avec un post['ref'] et si ça success tu ne récupères rien et tu rediriges sur ce fameux "pending_form_mhs.php" sans aucun param.
bref en gros, c comme si tu faisais un href="pending_form_mhs.php", ton ajax ne sert à rien, ou bien je n'ai pas compris la subtilité ;)

ADN
Auteur

Merci pour ta réponse saibe.
Eh bien ce que j'essaie de faire c'est être redirigé sur "pending_form_mhs.php" et sur cette page pouvoir utiliser ma valeur "ref". Je dois récupérer cette valeur dans mon success? Je pensais que mon success etait que j'avais bien envoyé la valeur sur la page. Comment puis-je faire?

;) utiliser un 'location' avec ajax n'a pas grand intérêt, à mon avis.
le plus simple dans ton cas serait de faire des liens comme ça :

<a href="pending_form_mhs.php?ref:taref">ton lien</a>

tu récupères donc un $_GET au niveau de ton php
tout simplement...
vu ton code, ton html doit à peu près ressembler à ça :

<span data-ref-cust="taref">
    <a href="#" data-action="mhs">le lien qui déclenche le truc</a>
</span>

tu n'as pas moyen de le réécrire ? sinon tu peux faire autrement....
tu pourrais envoyer ton html ?

Bonjour.
Pour ma part, je ne comprend absolument pas l'intérêt de ce que tu veux faire.
Car ce que tu récupères en javascript, c'est quelque chose que tu as auparavent injecté dans ton code HTML, ensuites tu veux récupérer cette valeur pour la renvoyer à ton code PHP et qu'il renvoit lui même à ton javascript, pour au final que le javascript fasse une redirection.
Même en expliquant ça, ce que tu veux faire est toujours confus pour moi.
Au passage, saches qu'à partir du moment où tu fais une redirection, tes variables PHP sont perdues après, même avec une redirection faite via le javascript.

Je dois récupérer cette valeur dans mon success? Je pensais que mon success etait que j'avais bien envoyé la valeur sur la page. Comment puis-je faire?

  • Ton javascript envoies via ajax en POST, à ta page nommée pending_form_mhs.php, la valeur de ce que tu stockes dans la variable href au niveau javascript
  • Le code PHP que tu nous montre, fait un echo de no ref, sauf que je n'en voit pas l'intérêt étant donné que tu ne sembles pas t'en servir par la suite puisque tu ne fais qu'une redirection vers la page que tu viens d'appeller via ajax.
ADN
Auteur

Alors j'explique mon code.

J'ai un tableau qui s'affiche grace a un code qui fonctionne en JSON
mon html:

var table = $('#example').DataTable( {
                    "sDom": "<'dt-toolbar'<'col-xs-12 col-sm-6'f><'col-sm-6 col-xs-12 hidden-xs'l>r>"+
                        "t"+
                        "<'dt-toolbar-footer'<'col-sm-6 col-xs-12 hidden-xs'i><'col-xs-12 col-sm-6'p>>",
                    "ajax": {type: "POST",
                            url: "scripts/customers_json.php",
                            data: {type: 'fetch'},
                            async: false,
                        },
                        .........

Donc j'ai fait un "customers_json.php" ou je récupère les valeurs de ma BDD et que je stoche en json. Le code est fait de sorte que j'ai des boutons dans ce tableau. Quand je click sur le bouton + d'une des ligne du tableau j'ai des infos en plus et des boutons d'action pour cette ligne.
mon customers_json.php:

'fax' => $row['fax'],
'mail' => $row['mail'],
'action' => "<span data-ref-cust='".$row['ref_cust']."'>
<button class='btn btn-xs btn-success' data-ref-action='mhs'>Mise.hs</button> 
<button class='btn btn-xs btn-success' data-ref-action='fdc'>Fourni.d.com</button>
......

Et dont dans mon html je récupère la référence de la ligne quand je click sur le bouton comme ceci:

 $('#example tbody').on('click', 'td.details-control', function () {
                    var tr = $(this).closest('tr');
                    var row = table.row( tr );

                    if ( row.child.isShown() ) {
                        // This row is already open - close it
                        row.child.hide();
                        tr.removeClass('shown');
                    }
                    else {
                        // Open this row
                        row.child( format(row.data()) ).show();
                        tr.addClass('shown');

                        $("tr td span button.btn").click(function() {

                            var action = $(this).attr("data-ref-action");
                            var ref = $(this).closest('span').attr("data-ref-cust");

                            if (action == 'mhs') {
                            ......

Donc ce code me permet d'ouvrir les informations supplémentaire de la ligne séléctionnée. Et dans ces info supplémentaire j'ai des bouton que j'ai dans mon customers_json.php:
Et donc si je click sur le bouton "mhs" l'action "mhs" ce lance et c'est dans cette action que j'aimerais recupérer mon ref (donc la ref de ma ligne) et aller sur une autre page avec elle pour pouvoir l'utiliser.

ADN
Auteur

merci beaucoup saibe. je ne connaissais pas cette fontcion. Je vais regarder ca de ce pas. merci

;) avec plaiz, DataTable est un super plugin, mais il est chaud à prendre en main au début, g bien galéré ;).
par exemple pour un refresh en temps réel (en imaginant avoir 15000 entrées paginées sur 200 pages:)) je n'ai trouvé que la méthode "_fnAjaxUpdate();" (kdo ;)) qui n'est pas ds l'api alors que la ref ajax.reload() ne fonctionnait pas...