jquery $ .GET несколько вызовов - PullRequest
1 голос
/ 26 марта 2009

Я изучаю jquery и написал это, чтобы я мог сделать два отдельных $ .GET для php-файла, получить некоторую информацию и сделать некоторые вычисления на нем. Я понимаю, что мог бы создать один конкретный php-файл, который бы делал все и возвращал нужное мне значение, но я подумал, что было бы более разумно использовать этот php-файл всякий раз, когда мне нужно получить информацию.

У меня есть это в функции, и я не был уверен, как сделать первый $ .GET, дождаться его завершения, присоединить его к переменной, затем выполнить второй $ .GET, передать ему переменную и сделать расчет. Вместо этого я вложил их вместе, что я не считаю правильным. Вот код.

    $.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

        });


    });

Есть ли более простой способ сделать это?

1 Ответ

1 голос
/ 26 марта 2009

Вы должны вложить их на каком-то уровне.

Из-за асинхронной природы Ajax (A = Асинхронный) невозможно просто остановить код 1 . Таким образом, вы должны сделать обработку в обратном вызове.

Лучшее, что вы можете получить, это реализовать функцию, которая вместо этого вызывается в обратных вызовах, чтобы они не были вложенными, но логика все еще была вложенной.

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. ну, вы можете, с синхронным режимом, но это противно, он останавливает все

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...