我在页面上有几个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个电话。
当我监控服务器时,活动是通向高的。
最好的方法是一个接一个地加载这个并减轻服务器上的压力?
答案 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
};
});