2012-11-07 2 views
0

우리는 우리 사이트의 몇몇 js 파일에 포함 된 "유틸리티"js 함수를 가지고있어서 코드 반복을 줄이기 위해 유틸리티 파일로 이동하고 모든 js를 수정했습니다 파일을 getScript과 함께 사용하기 전에로드하십시오. 이것은 대부분의 경우에 효과가 있었지만 라이브 쿼리를 사용하는 코드 한 장으로 인해 오류가 발생했습니다.livequery가있는 getScript - 비동기 실행 결과가 내 결과를 던졌습니다.

우리는 새로운 기능을 사용할 필요가 어디에 내가 성공적으로 사용하고 코드 :

$.getScript("js/utilities.js", function(){ 
    ... use parseQueryString function .... 
}); 

코드를 전 :

$('.preview') 
    .livequery(function(){ 
      $(this).attr('rel','myPage.cfm?' + parseQueryString($(this).attr('rel'))); 
     }); 
기본적으로

, "미리보기의 클래스마다 요소 "장면에 나타나면 rel 속성을 구문 분석하고 새로 파싱 한 문자열로 바꾸려고합니다.

코드 후 :

$('.preview') 
    .livequery(function(){ 
      var preview = $(this); 
      // load utilities.js so that we can access the parseQueryString function 
      $.getScript("js/utilities.js", function(){ 
       preview.attr('rel','myPage.cfm?' + parseQueryString(preview.attr('rel'))); 
      }); 
     }) 

문제이며, 이것은 getScript 호출의 콜백을 실행하기 전에 $('.preview').livequery 루프의 다음 반복으로 계속 될 것으로 보인다. 따라서 preview 변수는 rel 속성을 적절한 값으로 대체하기 전에 재설정됩니다. 어떻게 이것을 올바르게 실행할 수 있습니까?

답변

0

해결 방안 방금 작업 한 것처럼 보입니다. getScript 호출을 라이브 쿼리 루프 주위에 넣으십시오. :

// load utilities.js so that we can access the parseQueryString function 
$.getScript("js/utilities.js", function(){ 
    $('.preview') 
     .livequery(function(){ 
      $(this).attr('rel','myPage.cfm?' + parseQueryString($(this).attr('rel'))); 
     }) 
}); 
+0

다소 좋지만, 콜백에 동봉되어 있고 루프가 완료되면 일치하는 요소를 동적으로 추가하면 liveQuery가 제대로 작동하는지 확신 할 수 없습니다. –

0

나는 당신의 제목에 문제가 있다고 생각한다. '비동기식'은 정확히 원인이다. 성냥은 유효하다. 솔직히 나는 여러 번 반복 될 함수 안에 스크립트를 로딩하는 것이 좋지 않다고 생각합니다. 이것은 다소 의미가 없습니다. 보통 스크립트처럼 그냥 포함시키지 않을 이유가 없습니다.

<script src="js/utilities.js" type="text/javascript"></script> 

나는 이것이 가장 간단하고 합리적인 해결책이라고 생각합니다. 그러나 실제로 어떤 이유로이 코드를 사용할 수 없다면 컨텍스트를 통해 콜백 변수의 로컬 복사본을 확보하거나 (getScript는 $ .ajax 바로 가기이기 때문에 $.ajax context option을 참조하십시오) 또는 동기식 아약스를 시도하십시오. . 마지막 하나는 옵션이지만,이 경우 실제로 시도하지 말아주세요.

+0

코드를 사용하여 js 파일에 스크립트를 포함시킬 수 있다고 생각하지 않습니까? – froadie

+0

왜 안 되니? Ajax로 여러 번 요청한 서버에서 사용할 수있는 스크립트 파일입니다. 브라우저가 페이지 콘텐츠의 나머지 부분을 한 번에 가져 오는 것이 어떻습니까? –

+0

참조 http://stackoverflow.com/questions/950087/include-javascript-file-inside-javascript-file – froadie