Несколько запросов HTTP GET Ajax с различными входными переменными с использованием jQuery - PullRequest
4 голосов
/ 21 мая 2010

Я хочу делать асинхронные запросы на получение и получать разные результаты на основе входных данных, которые я предоставляю каждому.Вот мой код:

param=1;
$.get('http://localhost/my_page_1.php', param, function(data) {
   alert("id = "+param);
   $('.resul   5.t').html(data);
});

param=2;
$.get('http://localhost/my_page_2.php', param, function(data) {
   alert("id = "+param);
   $('.result').html(data);
});

Результат для обоих запросов: «id = 2» Я хочу, чтобы результаты были: «id = 1» для 1-го запроса и «id = 2» длявторой ..

Я хочу сделать это для многих запросов в одном файле HTML и интегрировать результаты в HTML, как только они будут готовы.

Может кто-нибудь помочь мне решить эту проблемупроблема?

Ответы [ 2 ]

4 голосов
/ 21 мая 2010

Поскольку ваши вызовы асинхронные, обратные вызовы не выполняются до тех пор, пока все вышеперечисленные строки не будут запущены. Это означает, что param будет установлен в значение 2, прежде чем ваш первый запрос get разрешится.

Создайте уникальные имена для ваших переменных, таких как param1, param2, вместо простого переназначения param.

Edit:

Проверьте этот код:

    for (var i = 0 ; i < 3; i++) {
        param = i;
        $.get('http://www.google.com',genCallback(param));
        param = i+5;
    }

    function genCallback(param) {
        var cb = function (data) {
            alert(param);
        }
        return cb;
    }

Честно говоря, я не совсем уверен, как это работает. Вы заметите, что он предупреждает числа 0, 1, 2 в некотором порядке, хотя я постоянно меняю параметр. Вместо того, чтобы создавать анонимную функцию в get напрямую, я создаю функцию на основе параметра. Я думаю, что происходит замыкание над cb, которое включает локальный параметр genCallback во время его выполнения.

1 голос
/ 21 мая 2010

Когда вы вызываете функцию AJAX, обратный вызов этого запроса обрабатывается не синхронно с остальным кодом. Функция, указанная для вызова при завершении запроса, не вызывается раньше ... запрос завершается.

Вот как будет работать ваш код чаще всего (из-за асинхронной природы AJAX):

  1. Вы установили param = 1 и отправили первый запрос Ajax
  2. Вы устанавливаете param = 2 и отправляете второй запрос ajax
  3. Первый вызов завершен. Обратный вызов для этого вызова обрабатывается. Ваша param переменная теперь 2
  4. Второй вызов завершен. Обратный вызов для этого вызова обрабатывается. Ваша param переменная еще 2

Решением было бы иметь разные переменные для каждого вызова или увеличить param и отправить второй вызов ajax внутри функции обратного вызова первого.

...