2010-02-28 1 views
0

Извините, что заголовок невелик, это вопрос загруженного вопроса. То, что я пытаюсь сделать, это загрузить несколько страниц из ссылок на странице (они находятся на одном хосте). В моем случае это форум в виде потока, и я бы хотел загрузить последнюю страницу сообщений, поэтому есть какой-то предварительный просмотр.Использование jquery и greasemonkey для получения нескольких страниц

Чтобы это было просто, в моем примере кода предполагается, что jquery уже загружен.

В основном код работает, однако, если существует много запросов, страница просто зависает, т.е. - если я изменяю условие на intIndex < 3 или более.

$('.lastposter').each(
     function (intIndex){ 
      if(intIndex < 2){ 
       var threadlink = $('a', this)[1].href; 
       var thread = $.ajax({ type: "GET", url: threadlink, async: false }).responseText; 

       $(this.parentNode.parentNode).attr('title', $('.post', thread).text()); 

      } 
     } 
    ); 

Итак, мой загруженный вопрос: есть ли лучший способ сделать это? Я думал, что мне нужна какая-то пауза в цикле, или, возможно, измените ее так, чтобы выполнялся запрос ajax (например) событие зависания строки. Также будут ли кэшированы результаты? Если нет, есть ли способ сделать их кэшированными или я должен просто оставить его на сервере? Я думал хранить их как переменную GM (GM_setValue), но, возможно, это будет беспорядочно и негерметично.

Если у вас есть идеи, предложения, примеры и т. Д., Я буду рад услышать о них.

ответ

1

Проблема с вашим кодом заключается в том, что он запрашивает не -асинхронный запрос. Это приводит к функции $ .ajax, ожидающей ответа серверов.

Для asynchrous запроса, вам необходимо определить функцию обратного вызова, например:

$.get(threadlink, function(thread) { 
    $(this.parentNode.parentNode).attr('title', $('.post', thread).text()); 
}); 

Для обработки ссылки по одному, а не кучей simulaneous запросов, вы могли бы захватить узлы в массиве (makeArray) и pop по одному за определенную скорость (setTimeout/setInterval). Обратите внимание, что greasemonkey получил некоторые подводные камни здесь ...

Результаты будут кэшироваться в основном как любая другая страница. IE не будет извлекать его до истечения срока действия. Возможно, вам нужно изменить заголовки ответов кэша серверов/истечения срока действия.

Взгляните на это, звучит похоже (но не использует JQuery)

http://userscripts.org/scripts/show/19613

+0

Спасибо за информацию, я предполагаю, что я не то, что ясно, что немного асинхронной делает. Я попробовал ваш метод прямо сейчас (обратный вызов), и кажется, что я просто регистрирую ответ, но я не могу установить заголовок с этим (я думаю, что это выходит за рамки?). Во всяком случае, я буду продолжать подключаться к нему, но ясно, что я не в своей глубине: D – aland

 Смежные вопросы

  • Нет связанных вопросов^_^