jQuery retour résultat ajax dans la variable extérieure

j'ai un problème à l'aide d'ajax.

Comment puis-je affecter tous les résultats d'ajax à une variable externe ?

je google et trouvé ce code..

var return_first = (function () {
    var tmp = null;
    $.ajax({
        'async': false,
        'type': "POST",
        'global': false,
        'dataType': 'html',
        'url': "ajax.php?first",
        'data': { 'request': "", 'target': arrange_url, 'method': method_target },
        'success': function (data) {
            tmp = data;
        }
    });
    return tmp;
});

mais ne fonctionne pas pour moi..

quelqu'un peut-il dire ce qui ne va pas avec ce code ?

23
demandé sur Mohd Shahril 2013-05-29 08:04:46

3 réponses

il Vous manque une virgule après

'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' }

Aussi, si vous voulez return_first pour tenir le résultat de votre fonction anonyme, vous devez faire un appel de fonction:

var return_first = function () {
    var tmp = null;
    $.ajax({
        'async': false,
        'type': "POST",
        'global': false,
        'dataType': 'html',
        'url': "ajax.php?first",
        'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' },
        'success': function (data) {
            tmp = data;
        }
    });
    return tmp;
}();

Remarque:() à la fin.

33
répondu Igor 2013-05-29 04:17:14

C'est tout ce que vous devez faire:

var myVariable;

$.ajax({
    'async': false,
    'type': "POST",
    'global': false,
    'dataType': 'html',
    'url': "ajax.php?first",
    'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' },
    'success': function (data) {
        myVariable = data;
    }
});

NOTE: l'utilisation de "async" a été dépréciée. Voir https://xhr.spec.whatwg.org/.

23
répondu joshuahealy 2018-03-17 12:32:20

en utilisant "asynchrone": false prévenir le code asynchrone est une mauvaise pratique,

Synchrone XMLHttpRequest sur le thread principal est déconseillée en raison de ses effets préjudiciables à l'expérience de l'utilisateur final. https://xhr.spec.whatwg.org/

à la surface, mettre async à false corrige beaucoup de problèmes parce que, comme le montrent les autres réponses, vous obtenez vos données dans une variable. Toutefois, en attendant l'envoi de données à retour (qui dans certains cas peut prendre quelques secondes à cause des appels de la base de données, des connexions lentes, etc.) le reste de votre fonctionnalité Javascript (comme les événements déclenchés, les boutons manipulés Javascript, les transitions JQuery (comme accordéon, ou autocomplete (jQuery UI)) ne pourra pas se produire tant que la réponse est en attente (ce qui est vraiment mauvais si la réponse ne revient jamais car votre site est maintenant essentiellement gelé).

Essayez ceci au lieu de cela,

var return_first;
function callback(response) {
  return_first = response;
  //use return_first variable here
}

$.ajax({
  'type': "POST",
  'global': false,
  'dataType': 'html',
  'url': "ajax.php?first",
  'data': { 'request': "", 'target': arrange_url, 'method': method_target },
  'success': function(data){
       callback(data);
  },
});
16
répondu Zahra Ghaed 2017-09-25 16:57:08