2010-02-28 4 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는 만료일 전에 검색하지 않습니다. 서버 캐시/만료 응답 헤더를 변경해야 할 수도 있습니다.

이 한 번 봐, 그것은 정보를

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

+0

감사 비슷한 소리 (하지만, jQuery를 사용하지 않습니다), 나는 비동기 비트가하는 일이 분명하지 것 같아. 난 그냥 귀하의 방법을 시도했다 (콜백) 그리고 만약 내가 그냥 응답을 기록 괜찮아 보이지만 나는 그것으로 제목을 설정할 수 없습니다 (이것은 범위를 벗어난 것 같아요?). 어쨌든, 나는 계속 그걸로 꽂아 보겠지만, 분명히 나는 ​​내 깊이에서 벗어났다 : D – aland