刚开始使用jQuery学习ajax请求。我已经尝试过查看其他帖子但不确定如何实现它。这是我的代码。现在它只是获得前3项。我希望它从rss中获取3个随机项目。这就是我所拥有的:
jQuery(document).ready(function($) {
$.ajax({
url: "http://thrive.local/wp-content/themes/thriveafrica/fetcher.php",
type: "GET",
success: function(d) {
$('item', d).slice(0, 3).each(function() {
var $item = $(this);
var title = $item.find('title').text();
var link = $item.find('link').text();
var description = $item.find('description').text();
var image = $(description).find('img').attr('src');
var price = $(description).find('span.SalePrice').text();
if (price == '') {price = 'Visit Store for Price'};
var html = '<li><a href="'+link+'" target="_blank">';
html += '<div class="image"><img src="'+image+'"></div>';
html += '<div class="info"><strong>'+title+'</strong><br/>'+price+'</div>';
html += '</a></li>';
// Example Output
// <li>
// <div class="image"><img src="http://www.thriveafricastore.com/product_images/s/041/coffee__59525_thumb.jpg"></div>
// <div class="info"><strong>Thrive Africa Blend (1lb)</strong><br>See Price</div>
// </li>
$('div#store ul').append($(html));
}); //End Each
} //End Success
}); // End Ajax Request
});
我有什么选择?
谢谢!
答案 0 :(得分:3)
在您的范围内生成3个唯一数字后,我会使用类似filter()的内容,而不是 slice():
var rnd1, rnd2, rnd3, undef,
items = $('item', d);
// Generate our random numbers:
rnd1 = Math.floor(Math.random()*items.length);
while (rnd2 == undef || rnd2 == rnd1)
rnd2 = Math.floor(Math.random()*items.length);
while (rnd3 == undef || rnd3 == rnd1 || rnd3 == rnd2)
rnd3 = Math.floor(Math.random()*items.length);
//filter our items, only the ones whose index matches one of our randoms:
items.filter(function (index) {
return index == rnd1 || index == rnd2 || index == rnd3;
}).each(function {
// rest of code...
});
请注意,如果返回的项目数少于3,则会在无限循环中停留,因为它会在 0 - 项目长度范围内生成3个唯一数字。如果可能的话,你可以带走while循环,只生成3个非唯一的randoms。
以下是使用以下代码随机删除3个div的示例: http://jsfiddle.net/dAjAt/ 。继续单击运行按钮以查看其实际效果。
答案 1 :(得分:1)
您可以使用shuffle-plugin来重新排列数组。代码类似于:
var myresults = $('item', d).shuffle();
myresults.slice(0, 3).each(function() {
// ...
}
答案 2 :(得分:1)
如果您只想要3件商品,那么您的服务器应该只返回3件商品。
非凡,如果你想用JavaScript实现这一点:
jQuery.fn.random = function (amount) {
var els = this.get();
var ret = [];
while (els.length && ret.length < amount) {
ret.push(els.splice(Math.floor(Math.random() * els.length), 1)[0]);
}
return $(ret);
}
然后,只需使用$('item', d).slice(0, 3).each
$('item', d).random(3).each