2015-10-08 4 views
0

Мой скрипт выполнял 2 одновременных вызова Ajax, и я заметил, что получал одинаковые результаты для каждого в обратном вызове, несмотря на то, что каждая страница имела совершенно другой контент. Это то, что первоначальный сценарий выглядел так:Одновременно запросы Ajax возвращают тот же результат

function getData(url) { 
    console.info(url); 
    $.ajax({ 
     type: "GET", 
     url: url, 
     async: true, 
     success: function(data) { 
      var response = $(data); 
      var $products = response.find("#results tr"); 
     } 
    }); 
} 

getData("http://www.thompson-morgan.com/flower-bulb-sale") 
getData("http://www.thompson-morgan.com/value-seed-varieties"); 

Проверка вкладку DevTools сети, каждый запрос действительно возвращался содержимое из первого запроса (http://www.thompson-morgan.com/flower-bulb-sale).

Первый запрос (http://www.thompson-morgan.com/flower-bulb-sale) производит правильный результат (это что желтый цветок, как это содержание страницы): enter image description here

Но второй запрос (http://www.thompson-morgan.com/value-seed-varieties) дает результат с первого запроса !:

enter image description here

Единственное, что, казалось, не допустить этого слегка пошатываясь каждый вызов с SetTimeout как таковой:

setTimeout(function(){getData("http://www.thompson-morgan.com/flower-bulb-sale")}, 0); 
setTimeout(function(){getData("http://www.thompson-morgan.com/value-seed-varieties")}, 1000); 

enter image description here

Почему бы второй запрос возвращает содержимое от первого запроса? Есть ли способ обойти это без необходимости использовать пошаговые запросы, как я это сделал?

+3

Звучит как проблема на стороне сервера. В лучшем случае исправление его клиентской стороны будет в худшем случае. –

+0

может быть, что $ products переписывается? возможно, подумайте об использовании обещаний и обещаний. all() http://www.html5rocks.com/en/tutorials/es6/promises/ –

+0

@JonahWilliams nope. поскольку проблема присутствует на вкладке сети. –

ответ

0

Изменить приведенный выше код ниже. Теперь мы имеем возвращаемое значение и можем указать местоположение данных с использованием метода .done()

function getData(url) { 
    return $.ajax({ 
     type: "GET", 
     url: url, 
     async: true, 
    }); 
} 

getData("http://www.thompson-morgan.com/flower-bulb-sale") 
    .done(function(res) { 
     //do something with res 
     var response = $(data); 
     console.log(response.find("#results tr")); 
    }); 
getData("http://www.thompson-morgan.com/value-seed-varieties") 
    .done(function(res) { 
      //do something with res 
     var response = $(data); 
     console.log(response.find("#results tr")); 
    }); 
+0

К сожалению, я ограничен использованием jQuery v1.4.2, который не поддерживает выполняемую функцию. –

Смежные вопросы