0
votes

Comment renvoyer false à une variable globale dans la fonction Ajax

Comment puis-je passer vrai ou faux en dehors de cette fonction Ajax? J'ai besoin de retourner faux sur quelque chose et je ne peux pas le faire dans Ajax

    var zip = $('#order-zip').val();

var zipvalidated;

$.ajax({
    type: 'POST',
    url: 'checkzip.php',
    data: {post:zip},
    dataType: 'json',
    success: function(data) {

        zipvalidated = true;

        if (data.response !== "success"){

            console.log(data);
            console.log ("sorry, we are not delivering in your area right now");
            zipvalidated = false;


        }
    }
});

console.log (zipvalidated);

if (zipvalidated == false) {
    return false;
}else{
    console.log ("pass!")
}


1 commentaires

Est-ce que cela répond à votre question? Comment renvoyer la réponse d'un appel asynchrone?


3 Réponses :


0
votes

Ajax est asynchrone par défaut, donc votre instruction if s'exécute avant la mise à jour de la variable validée par zip. Utilisez async / await ou essayez de définir async: false sur votre requête ajax.


2 commentaires

pas une bonne idée, vous pouvez également utiliser la fonction de rappel à la place


Veuillez ne pas recommander async:false - il est actuellement obsolète dans Chrome (et dans d'autres navigateurs sans aucun doute, n'a pas pris la peine de vérifier) et sera supprimé à l'avenir.



1
votes

Vous pouvez forcer votre requête à être synchrone avec async: false, mais ce n'est pas recommandé car cela provoquera le verrouillage du navigateur en attendant les résultats.

Vous pouvez utiliser la fonction de rappel à la place

const zip = $('#order-zip').val()
var zipvalidated = true

function getZip(zip,callback) {
    $.ajax({
        type: 'POST',
        url: 'checkzip.php',
        data: {post:zip},
        dataType: 'json',
        success: function(data) {
            callback(data)
        }
    })
}

getZip(zip,function(data) {

    if (data.response !== "success"){
        console.log(data);
        console.log ("sorry, we are not delivering in your area right now");
        zipvalidated = false;
    }
})

console.log (zipvalidated)


3 commentaires

Cela ne fonctionne toujours pas car cela ne me permettra pas de retourner false en dehors de la fonction getZip.


console.log (zipvalidated) lira toujours true, jamais false,


correct, et aussi pourquoi vous devez retourner faux? est-ce une enveloppe avec fonction



0
votes

Mettez simplement la vérification dans votre fonction de rappel

$.ajax({
    type: 'POST',
    url: 'checkzip.php',
    data: {post:zip},
    dataType: 'json',
    success: function(data) {

        zipvalidated = true;

        if (data.response !== "success"){

            console.log(data);
            console.log ("sorry, we are not delivering in your area right now");
            zipvalidated = false;
            console.log (zipvalidated);
            if (zipvalidated == false) {
                return false;
            }else{
                console.log ("pass!")
            }

        }
    }
});


0 commentaires