2016-07-31 75 views
1

我正在尝试修改一个Wordpress插件,以便它不会频繁执行admin-ajax.php脚本。该插件在页面上显示轮询 - 它在文档准备就绪后异步加载它们。有问题的脚本是下面写的async-load.js。现在.load在for循环中用于显示页面上的每个轮询(每个页面有多个轮询)。这会为页面上的每个轮询执行admin-ajax脚本 - 例如,如果有10次轮询脚本被执行了10次。Jquery .load - 同时具有不同数据的多个ID - Wordpress

我想知道是否可以修改脚本,以便它只显示一个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

这只是你应该做的一般想法,它是不是一个工作示例。

在您的示例中,变量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) 
      ... 
     }); 
    } 
    ... 
}); 
相关问题