因此,我想获取约6000个配置文件的信息,每个配置文件都有自己的链接,其编号从1-6000开始。我想从一个页面中获取每个配置文件的特定图像。这里是代码,以获得用户1的个人资料...它说u1它需要用每个不同的数字代替1。为内容添加不同的号码
<span id="boutiqueimage"></span>
<script>$('#boutiqueimage').load('/u1 #field_id14 dd')
</script>
因此,我想获取约6000个配置文件的信息,每个配置文件都有自己的链接,其编号从1-6000开始。我想从一个页面中获取每个配置文件的特定图像。这里是代码,以获得用户1的个人资料...它说u1它需要用每个不同的数字代替1。为内容添加不同的号码
<span id="boutiqueimage"></span>
<script>$('#boutiqueimage').load('/u1 #field_id14 dd')
</script>
乍一看这似乎是一个简单的循环会做的伎俩,但问题不一定取图像但他们做什么,当你得到他们。为此,您不想使用,因为它只是在您的用例之外。 (它假定你要设置的获取内容的元素,但你要追加所获取的内容的元素。)
为了做到这一点,我们需要执行几乎相同的功能,让我们见how it does its thing。看起来它只是.ajax()
标准调用这个作为它的成功处理程序:
self.html(selector ?
jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) :
responseText);
似乎很简单。我们可以多一点简化它,因为我们知道我们有一个selector
值:
$('#boutiqueimage').append(jQuery('<div>').append(jQuery.parseHTML(responseText)).find(selector));
我们:
self.html(jQuery('<div>').append(jQuery.parseHTML(responseText)).find(selector));
现在不是在self
调用.html()
,我们我们的目标元素调用append()
需要明确定义selector
:
$('#boutiqueimage').append(jQuery('<div>').append(jQuery.parseHTML(responseText)).find('#field_id14 dd'));
现在我们可以换,在AJAX调用:
jQuery.ajax({
url: '/u1',
type: 'GET',
dataType: 'html'
}).done(function(responseText) {
$('#boutiqueimage').append(jQuery('<div>').append(jQuery.parseHTML(responseText)).find('#field_id14 dd'));
});
这应该为我们的需要复制的功能。 现在我们可以把它在一个循环:
for (var i = 1; i <= 6000; i++) {
jQuery.ajax({
url: '/u' + i,
type: 'GET',
dataType: 'html'
}).done(function(responseText) {
$('#boutiqueimage').append(jQuery('<div>').append(jQuery.parseHTML(responseText)).find('#field_id14 dd'));
});
}
这应该使6000个AJAX请求每个的url
是i
从循环不同的值。请记住,有没有保证响应将按照它们的请求顺序进行。所以这是非常不太可能产生的图像将被排序从1-6000。
编辑:在回应评论时,或许以串行而不是并行运行请求会有所帮助。让我们将操作封装到一个函数中,并从它自己的成功处理函数中调用它。也许是这样的:
function fetchImage(id) {
jQuery.ajax({
url: '/u' + id,
type: 'GET',
dataType: 'html'
}).done(function(responseText) {
$('#boutiqueimage').append(jQuery('<div>').append(jQuery.parseHTML(responseText)).find('#field_id14 dd'));
if (id < 6000) {
fetchImage(id + 1);
}
});
}
fetchImage(1);
这会加载他们慢很多,因为它一次只有一个。但我猜6000首同时请求并不是一个好主意:)这也会顺序加载它们,这是一个奖励。
假设您发布的代码适用于配置文件1,并且配置文件的编号从1到6000,并且您不需要分页,那么试试这个。注意:访问片段会导致下载整个页面! 更好的解决方案是设置一个仅返回必要的html的服务器进程。
var max = 6000,cnt=1;
function loadNext() {
$("#container").append('<span id="boutiqueimage'+cnt+'"></span>'); // add a span
$('#boutiqueimage'+cnt).load('/u'+cnt+' #field_id14 dd',
function (responseText, textStatus, req) { // if error
if (textStatus == "error") {
$('#boutiqueimage'+cnt).html("image "+cnt+" not found");
}
else {
if (cnt<max) {
cnt++;
loadNext();
}
}
});
}
$(function() {
loadNext(); //start
});
使用
<div id="container"></div>
好了,你可以得到* *通过调用'.load()'在一个循环中的图像。但是使用当前的设置会导致每个响应覆盖目标元素中的前一个响应。你想用6000张图片做什么?将它们全部添加到该元素?他们的命令是否重要? – David 2014-10-03 19:58:16
@大卫有些人可能甚至没有图像和其他人会,我基本上想要让他们,让我可以显示他们所有人,并通过不同的用户图像看,让别人也看到它。你能否告诉我一个更好的方法让他们像你说的一样循环? – 2014-10-03 20:33:17
@mplungjan某些配置文件ID对帮助描述不是很明确吗? – 2014-10-03 20:37:00