2009-03-26 8 views
1

J'apprends jquery et j'ai écrit ceci afin que je puisse faire deux $ séparément .GET à un fichier php, récupérer quelques informations et faire quelques calculs dessus. Je comprends que je pourrais créer un fichier php spécifique qui fait tout et renvoie la valeur dont j'ai besoin, mais je pensais qu'il serait plus logique de réutiliser ce fichier php chaque fois que j'ai besoin de récupérer des informations.

Je l'ai dans une fonction et je ne savais pas comment faire le premier $ .GET, attendez qu'il se termine, attachez-le à une variable, puis exécutez la deuxième $ .GET passer la variable et fais le calcul. Au lieu de cela, je les ai emboîtés ensemble, ce que je ne pense pas être juste. Voici le code.

$.get("selectdb.php", { 'id':nsname, 'q':'basecomplexity','table':'switchers' }, function(data) 
    { 

     $('#switchtotal'+lastIndex).html(data); //sets data to #switchtotal 

     $.get("selectdb.php", { 'id':nsname, 'q':'sources','table':'switchers' }, function(data) 
     { 
      var val1 = $('#switchtotal'+lastIndex).html(); 
      var answer = ((parseFloat(nszones)*parseFloat(data))+parseFloat(val1))*parseFloat(nsquant); 
      $('#switchtotal'+lastIndex).html(answer.toFixed(2)); //calculates formula and displays 

     }); 


    }); 

Existe-t-il un moyen plus simple de faire cela?

Répondre

1

Vous devez les imbriquer à un certain niveau.

En raison de la nature asynchrone de Ajax (A = asynchrone), il n'y a aucun moyen de vraiment arrêter le code . Donc, vous devez faire le traitement dans le rappel. Le mieux que vous pouvez obtenir est d'implémenter une fonction qui est appelée dans les callbacks à la place, donc ils ne sont pas imbriqués, mais la logique est toujours imbriquée.

jQuery(function($){ 

function dbselect(opts, callback){ 
    $.get("select.php", opts, callback); 
} 

function handle_sources(data){ 
    var val1 = $('#switchtotal'+lastIndex).html(); 
    var answer = ((parseFloat(nszones)*parseFloat(data))+parseFloat(val1))*parseFloat(nsquant); 
    $('#switchtotal'+lastIndex).html(answer.toFixed(2)); //calculates formula and displays 
} 
function handle_basecomplex (data){ 
    $('#switchtotal'+lastIndex).html(data); //sets data to #switchtotal 
    dbselect({ 'id':nsname, 'q':'sources','table':'switchers' } , handle_sources); 
} 

dbselect({ 'id':nsname, 'q':'basecomplexity','table':'switchers' }, handle_basecomplex); 

}); 

1. Eh bien, vous pouvez, en mode synchrone, mais c'est méchant, il arrête tout

Questions connexes