2014-10-03 4 views
0

Итак, я хочу получить информацию о 6000 профилях, и каждый из них имеет ссылки на свой номер с определенным номером в порядке от 1 до 6000. Я хочу получить конкретное изображение из каждого из своих профилей на одной странице. Вот код, чтобы получить его для профиля пользователя 1. Там, где говорится, что u1 нужно заменить 1 на каждый из разных чисел.Добавить разные номера для контента

<span id="boutiqueimage"></span> 
<script>$('#boutiqueimage').load('/u1 #field_id14 dd') 
             </script> 
+0

Ну, вы можете получить * * изображения с помощью вызова '.load()' в цикле. Но с текущей настройкой, которая приведет к тому, что каждый ответ перепишет предыдущий в целевом элементе. Что вы хотите делать со всеми 6000 изображениями? Добавьте их все в этот элемент? Имеет ли смысл их порядок? – David

+0

@David Некоторые могут даже не иметь изображений и других, я в основном хочу их получить, чтобы я мог отображать их все и просматривать изображения разных пользователей, а также видеть, как другие видят его. Не могли бы вы показать мне лучший способ получить их всех в петле, как вы сказали? –

+0

@mplungjan Удовлетворённый пользовательский идентификатор id не очень описателен для справки. –

ответ

0

На первый взгляд кажется простой цикл будет делать трюк, но проблема не обязательно выборка изображения, но что с ними делать, когда вы получить их. Для этого вы не хотите использовать .load(), потому что он находится за пределами вашего прецедента. (Предполагается, что вы хотите установить сгружено содержание к элементу, но вы хотите добавить извлечённого содержания к элементу.)

Чтобы сделать это, нам нужно выполнить почти такую ​​же функциональность как .load(), так что давайте см. how it does its thing. Похоже, это просто стандартный вызов .ajax() с этим, как его обработчик успеха:

self.html(selector ? 
      jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : 
      responseText); 

Кажется достаточно просто. И мы можем упростить это немного больше, так как мы знаем, у нас есть selector значение:

self.html(jQuery('<div>').append(jQuery.parseHTML(responseText)).find(selector)); 

Теперь вместо вызова .html() на self, мы называем append() на нашем целевом элементе:

$('#boutiqueimage').append(jQuery('<div>').append(jQuery.parseHTML(responseText)).find(selector)); 

Мы также необходимо явно определить 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')); 
}); 

Это должно повторить функциональность .load() для наших нужд. Теперь мы можем положить его в цикле:

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 из цикла. Имейте в виду, что есть no гарантируют, что ответы будут поступать в том же порядке, в котором они были запрошены. Так что очень маловероятно, что результирующие изображения будут отсортированы с 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 одновременных запросов не были хорошей идеей в первую очередь :) Это также будет загружать их последовательно, что является бонусом.

+0

Ну, похоже, что-то делает, когда я открываю консоль. Я получаю это сообщение об ошибке. Не удалось загрузить ресурс: сервер ответил статусом 503 (услуга временно недоступна), а некоторые из этого Uncaught TypeError: undefined не является функцией, которую я знаю, что некоторые могут не иметь изображения для нее, но хотели показать оба кода для справки? –

+0

Очень плохой совет дает 6000 изображений в цикле. Вместо этого выполните следующую выборку при успешном получении каждого изображения. – mplungjan

+0

@LeandraKatelyn: Я обновил ответ с помощью модифицированного подхода, возможно, стоит попробовать. – David

0

Предполагая, что вы опубликовали код для профиля 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> 
Смежные вопросы