[RESOLU] Executer un script une seule fois

Mammouth du PHP | 725 Messages

25 août 2013, 08:01

Bonjour,

J'ai un code qui execute une page ajax, je verifie si le lien clique est "1" on fait apparaitre une liste select sinon on execute le code ajax:
$(".showStatus").change(function () {
            var clicked = $(this).attr('value');
            var statusData = $('.changeStaus').serialize();
            var dataString = statusData + '&' + clicked;
 
            /* je verifie si clicked est == 1 on fait apparaitre une liste "refReason", sinon on execute le code ajax
        lors de l'apparition de la liste "refReason", on fait un autre choix depuis la liste, et apres on execute le code ajax
        */
 
            if(clicked == 1) {
              $('.refReason').slideDown(1000);
                          }
                 
 
 $.ajax({
        type: "POST",
        url: "Admins/statusActions.php",
        data: dataString,
        dataType: "json",
        success: function(data) {
 
// des conditions pour valider les erreurs
                    }
Autrement dit, quand status == 1, montrer la liste, faire le choix et effectuer ajax, sinon effectuer ajax seulement sans montrer de liste, a raison de ne pas dupliquer le code ajax 2 fois:

Merci a vous

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 août 2013, 12:37

Salut,

Perso je n'ai pas compris ton problème.

Ton code semble faire ce que tu dis, qu'est ce qui ne va pas ?

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

25 août 2013, 13:15

je m'explique:

J'ai une liste deroulante: option1, option2, option3

+ Quand je selectionne option1, je veux afficher une autre liste: option11, option111, option111

==> Quand je selectionne une des options (option11, option111, option111) j'execute le code ajax

+ Quand je selectionne option2 ou 3, j'execute le code ajax sans passer par des sous options

au lieu de faire:
if(var == 'option1') ==> afficher les sous options  et puis executer
else ==> executer
dans ce cas je vais appeller le code ajax 2 fois, je veux l'appeller qu'une seule fois

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 août 2013, 21:14

Vire le else et met la requête sous le if.

Du coup le if restreint au ça avec l'option.

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

26 août 2013, 01:00

si je mets comme ca:

[javascript]
$(".showStatus").change(function () {
$('.refReason').hide(1000);
var clicked = $(this).attr('value');
var statusData = $('.changeStaus').serialize();
var dataString = statusData + '&' + clicked;

if(clicked == 1) {
$('.refReason').slideDown(1000);
}
sendAjaxRequest();

}); // end $(".showStatus").click(function () {

sendAjaxRequest = function(){
$.ajax({
[/javascript]

Je recois un message que dataString n'est pas defini, alors je change par:

[javascript] sendAjaxRequest = function(dataString){ [/javascript]

dans les 2 cas le code ajax est execute, ce que je cherche en clair:

Quand je selectionne option1, une liste doit etre affichee et apres on selectionne depuis cette 2eme liste et la on execute ajax

Quand je selectionne quoi que ce soit, autre que option1, le code ajax doit etre execute, sans afficher une 2eme liste

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 août 2013, 13:14

pourquoi n'utilise tu pas simplement un tableau avec les données ?
exemple dans la doc : http://api.jquery.com/jQuery.ajax/#entry-examples
ton code ne fournit pas du json correct (le &truc ajouté a datastring par exemple).

par exemple (tiré de la doc et dernière version jquery).
[javascript]
$.ajax({
type: "POST",
url: "Admins/statusActions.php",
data: {statusData = $('.changeStaus').text, clicked = $(this).attr('value')}, // remplace this par le nom du champ ?
})
.done(function (msg) { alert("success"); // ou le traitement que tu veux} );[/javascript]

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

27 août 2013, 00:46

une autre solution:

[javascript]
$(".showStatus").change(function () {
$('.refReason').hide(1000);
var clicked = $(this).attr('value');
var statusData = $('.changeStaus').serialize();
var dataString = statusData + '&' + clicked;

if(clicked == 1) {
$('.refReason').slideDown(1000);
}
else {

$.ajax({

// code
[/javascript]

tout en donnant au sous liste les class refReason et showStatus

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 août 2013, 10:07

Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton vert "Mettre le sujet en tant que Résolu" situé en haut de la page à côté du titre du sujet.
Il en faut peu pour être heureux ......