Jquery .load - 一次使用不同数据的多个ID - Wordpress

时间:2016-07-31 15:27:50

标签: javascript jquery ajax wordpress

我正在尝试修改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();
        });
    };
});

};

欢迎任何建议。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

这只是你应该做的一般概念,它是一个工作样本。

在您的示例中,变量pollIDArray,其中包含所有民意调查的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)
            ...
        });
    }
    ...
});