JQuery / PHP - 将一堆ajax请求分成几批?

时间:2012-02-21 14:00:12

标签: php jquery

更新:似乎我在某种程度上浪费了我的时间,因为根据http://www.browserscope.org/?category=network&v=top-d大多数现代浏览器已经限制了与单个主机的连接数量。 6是适合我目的的常见连接数。但我想这仍然是一个有趣的问题。

我工作任务的拼图的最后一部分是将可能250多个ajax请求列入批量列表。

作为以下php代码的结果

<?
// print("alert(\" booya \");");
  $hitlist = array();
  $hitlist = urlBuilder($markets,$template);
  foreach ($hitlist as $mktlist) {
      foreach ($mktlist as $id => $hit) {
          $cc = substr($id,0,2);
          $lc = substr($id,-4);
          echo ("$(\"#" . $cc . $lc . "\").load(\"psurl.php?server=" . $server . "&url=" . $hit . "&port=" . $port . "\");\n");
      }
  }
?>

这将生成一个jquery .load的长列表,现在它们都是在点击时执行的。

e.g。

$("#sesv-1").load("psurl.php?server=101.abc.com&url=/se/sv&port=80");
$("#sesv-2").load("psurl.php?server=101.abc.com&url=/se/sv/catalog/&port=80");
$("#sesv-3").load("psurl.php?server=101.abc.com&url=/se/sv/catalog/products/12345678&port=80");
$("#atde-1").load("psurl.php?server=101.abc.com&url=/at/de&port=80");
$("#atde-2").load("psurl.php?server=101.abc.com&url=/at/de/catalog/&port=80");
$("#atde-3").load("psurl.php?server=101.abc.com&url=/at/de/catalog/products/12345678&port=80");
$("#benl-1").load("psurl.php?server=101.abc.com&url=/be/nl&port=80");
$("#benl-2").load("psurl.php?server=101.abc.com&url=/be/nl/catalog/&port=80");
$("#benl-3").load("psurl.php?server=101.abc.com&url=/be/nl/catalog/products/12345678&port=80");
$("#befr-1").load("psurl.php?server=101.abc.com&url=/be/fr&port=80");
$("#befr-2").load("psurl.php?server=101.abc.com&url=/be/fr/catalog/&port=80");
$("#befr-3").load("psurl.php?server=101.abc.com&url=/be/fr/catalog/products/12345678&port=80");

根据具体情况,它可能像250个请求,也可能只有30-40个。该应用程序的整个目的是为新的重新启动的应用程序服务器预热......所以新的jvm中的250个请求=死!

理想情况下,我想打破它们。也许市场最好是一次最多5-6个请求。

关于如何实现这一目标的任何想法?是否可以在标准jquery中使用?试图尽可能限制依赖关系,最好没有插件!

1 个答案:

答案 0 :(得分:1)

您可以使用jQuery的.queue

// Define a queue for execution
var
$elem = $("#sesv-1"),
enqueue = function(a){ $elem.queue("status", a) };

// Queue your requests
enqueue(function(a){
  $aElem.load("url", a);
});

enqueue(function(a){
  $otherElem.load("url", a);
});

// Execute the queue
$elem.dequeue("status");

您可以根据需要创建任意数量的队列(最有可能是每个市场),然后将您的请求排入队列。