一个接一个地加载Ajax

时间:2013-11-13 09:10:57

标签: jquery ajax

我在页面上有几个ajax调用,不止一些,我的任务是减少服务器密集度。

这是代码的当前设置:

$.getJSON('charts_ajax.php',{a : 'visits', rangeStartDate : '<?=$_POST["rangeStartDate"] ?>', rangeEndDate : '<?= $_POST["rangeEndDate"] ?>'},function(data){
    //stuff
};

$.getJSON('charts_ajax.php',{a : 'terms', rangeStartDate : '<?=$_POST["rangeStartDate"] ?>', rangeEndDate : '<?= $_POST["rangeEndDate"] ?>'},function(data){
    //stuff
};
$.getJSON('charts_ajax.php',{a : 'usage', rangeStartDate : '<?=$_POST["rangeStartDate"] ?>', rangeEndDate : '<?= $_POST["rangeEndDate"] ?>'},function(data){
    //stuff
};
$.getJSON('charts_ajax.php',{a : 'content', rangeStartDate : '<?=$_POST["rangeStartDate"] ?>', rangeEndDate : '<?= $_POST["rangeEndDate"] ?>'},function(data){
    //stuff
};

这还有其他15个电话。

当我监控服务器时,活动是通向高的。

最好的方法是一个接一个地加载这个并减轻服务器上的压力?

3 个答案:

答案 0 :(得分:0)

使用jQueries deferred.then

$.getJSON('charts_ajax.php',{a : 'visits', rangeStartDate : '<?=$_POST["rangeStartDate"] ?>', rangeEndDate : '<?= $_POST["rangeEndDate"] ?>'}).then(function(data1) {
    //stuff
    $.getJSON('charts_ajax.php',{a : 'terms', rangeStartDate : '<?=$_POST["rangeStartDate"] ?>', rangeEndDate : '<?= $_POST["rangeEndDate"] ?>'}).then(function(data2){
         //stuff
         //etc.
    };
});

或者你可以在一些逻辑函数中划分代码,返回Deferred:

function someName() {
    return $.getJSON('charts_ajax.php',{a : 'visits', rangeStartDate : '<?=$_POST["rangeStartDate"] ?>', rangeEndDate : '<?= $_POST["rangeEndDate"] ?>'}).then(function(data1) {
        //stuff
    });
}

function someOtherName() {
    return $.getJSON('charts_ajax.php',{a : 'terms', rangeStartDate : '<?=$_POST["rangeStartDate"] ?>', rangeEndDate : '<?= $_POST["rangeEndDate"] ?>'}).then(function(data2){
         //stuff
    });
}

someName().then(someOtherName).then(etc).then(function() {
    console.log("done");
);

}

答案 1 :(得分:-1)

将其重写为单个调用/响应,并将其解析出来,这将是一个猜测

答案 2 :(得分:-1)

$。getJSON是一种速记Ajax函数,相当于:

$.ajax(
{
  dataType: "json",
  url: url,
  data: data,
  success: success
});

根据文件(http://api.jquery.com/jQuery.ajax/):

  

async(默认值:true)类型:Boolean默认情况下,发送所有请求   异步(即默认设置为true)。如果你需要   同步请求,将此选项设置为false。跨域请求   和dataType:“jsonp”请求不支持同步操作。   请注意,同步请求可能会暂时锁定浏览器,   在请求处于活动状态时禁用任何操作。从jQuery 1.8开始,   不推荐使用async:false和jqXHR($ .Deferred);您   必须使用success / error / complete回调选项而不是   jqXHR对象的相应方法,如jqXHR.done()或   不推荐使用jqXHR.success()。

所以你可以像这样重写:

$.ajax(
{
  dataType: "json",
  async: false,
  url: 'charts_ajax.php',
  data: {a : 'visits', rangeStartDate : '<?=$_POST["rangeStartDate"] ?>', rangeEndDate : '<?= $_POST["rangeEndDate"] ?>'},
  success: function(data)
  {
        //stuff
  };
});