我正在尝试修改Wordpress插件,以便它不那么频繁地执行admin-ajax.php脚本。该插件在页面上显示轮询 - 它在文档准备好后异步加载它们。有问题的脚本是下面写的async-load.js。现在.load在for循环中用于显示页面上的每个轮询(每个页面有多个轮询)。这会对页面上的每个轮询执行admin-ajax脚本 - 例如,如果有10个轮询,脚本将被执行10次。
我想知道是否可以修改脚本以便它只显示一个admin-ajax.php脚本执行的所有轮询。
以下是完整代码:
if (window['tp_async_polls']) {
jQuery(document).ready(function ($) {
var pollContainer = [];
var pollID = [];
$(tp_async_polls).each(function (index, poll) {
//tp_async_polls gives an array of object with keys id and container
pollContainer.push(poll.container);
//store each poll's container id in array
pollID.push(poll.id);
//store each poll's id in array
});
for (i=1; i < pollContainer.length; i++) {
//loop through polls and display them - here the admin-ajax.php gets executed for every poll that is on a page. Looking for solution to only execute it once per page load.
$(pollContainer[i]).load(totalpoll_cache_compatibility.ajaxurl, {action: 'load_tp', tp_poll_id: pollID[i]}, function () {
FastClick.attach(this);
$(this).animateVotesBar();
});
};
});
};
欢迎任何建议。谢谢你的帮助。
答案 0 :(得分:0)
这只是你应该做的一般概念,它是不一个工作样本。
在您的示例中,变量pollID
是Array
,其中包含所有民意调查的ID。
不是循环遍历所有容器并请求每个容器的内容,而是发送1个带有id列表的请求(pollID
),一旦收到数据,您就可以更新相应的民意调查。
请求
更改请求的数据{action: 'load_tp', tp_poll_id: pollID[i]}
类似
{action: 'load_tps', all_poll_ids: pollID}
服务器中的代码应该返回如下内容:
{
165 : '<div> CONTENT OF HTML FOR POLL ID = 165</div>',
179 : '<div> CONTENT OF HTML FOR POLL ID = 179</div>',
....
}
您可以使用$.ajax
发送请求,如下所示:
$.ajax({
type: "POST",
url: totalpoll_cache_compatibility.ajaxurl,
data: {action: 'load_tps', all_poll_ids: pollID},
success: function(data) {
$.each(data, function(poll_id, poll_html) {
$(pollContainer[poll_id]).html(poll_html)
...
});
}
...
});