2013-08-16 1 views
0

내 도메인에 이미지가 있으면 배열에 넣으려는 경우 jQuery로 확인하려고합니다. 그 코드를 가지고 : 숫자 X 개의 이미지가 있는지 확인하고 배열에 넣으십시오.

jQuery(document).ready(function($) { 
    var images = new Array(); 
    var flag = true; 
    var i = 0; 
    var x = 1; 
    while(flag) { 
     $.ajax({ 
      url:'http://localhost/testImages/images/picture-1-' + x + '.jpg', 
      type:'HEAD', 
      error: function() { 
       flag = false; 
       return flag; 
      }, 
      success: function() { 
       images[i] = '<?php echo $productSlug . "-1-"; ?>'; 
       images[i] += x + '.jpg'; 
       return images[i]; 
      } 
      i++; 
      x++; 
     }); 
     alert(flag); 
    } 
}); 

내가 부하 요금 일부 오류가 있었기 때문에 내가 가까이 파이어 폭스 강제해야하는 페이지를 실행

. 나는 그 변수의 상태를 알기 위해 경고 (flag)를 가지고 있고 false를 기다린다. 나는 while 루프를 주석 처리하고 내 이미지 이름에 존재하지 않는 숫자를 'x'로 바꾸고 플래그 변수는 항상 true를 반환합니다.

나는이 문제가 아약스 코드에 있다고 생각하지만, 많은 경험이 없다.

+2

[AJAX 호출에서 응답을 반환하는 방법] 가능한 중복?] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) –

답변

0

잘못된 구문이 있습니다.

 i++; 
     x++; 

success 내부에 있어야합니다. 또한 while 루프는 요청 중 하나가 오류 일 때까지 멈추지 않습니다. 오류가 발생하거나 발생하지 않을 수도 있습니다.

어떻게하려고하는지 확인하려면 요청에서 코드를 "차단"하여 동기화되도록해야합니다. ajax 인수의 일부로 async:false을 사용하십시오.

0

시도해 볼 수 있습니까? 증가분을 성공 콜백으로 옮기는 것이 도움이 될 것이라고 생각합니다. 나는 또한 당신이 오직 하나만 필요하다고 생각합니다.

while(flag) { 
     $.ajax({ 
      url:'http://localhost/testImages/images/picture-1-' + x + '.jpg', 
      type:'HEAD', 
      error: function() { 
       flag = false; 
       return flag; 
      }, 
      success: function() { 
       images[i] = '<?php echo $productSlug . "-1-"; ?>'; 
       images[i] += x + '.jpg'; 
       i++; 
       x++; 
       return images[i]; 

      } 

     }); 
     alert(flag); 
    } 

나는이 방식으로 파일 시스템을 검사하는 것이 가장 우아한 방법이 아니라고 말하고 싶습니다. 결국 false를 반환 할 수있는 AJAX 호출을 시작할 수 있지만 잠시 동안 AJAX는 비동기이므로 추가 호출을 계속 실행할 수 있습니다.

서버 측 웹 서비스가 이상적인 방법 일 것입니다. 거기에 더 나은 방법이 될 수있는 파일 API도하지만, 전체 브라우저 지원하지 않습니다

당신은 당신의 성공 콜백에 return images[i];를 작성할 필요가 없습니다 http://caniuse.com/fileapi

UPDATE, 당신 등을 실제로 아무것도 배열을 반환하지 않습니다. 현재 아키텍처를 감안할 때 오류 처리기에서 이미지 배열을 처리하기를 원할 것입니다. 더 이상 관심있는 파일이 없다는 단서가 있기는하지만 다시 한 번이 작업을 수행 할 수있는 방법을 찾으려고합니다. 가능한.

는 업데이트 # 2

그리고 닉이 절대적으로 정확, 당신은 내가 (도대체 내가 놓칠 않았다 방법?!)

앞서 언급 한 동시성의 문제를 미연에 방지 할 동기에 이상이 플립한다
+0

성공 콜백의 증분은 이전보다 더 많은 일을하지만 플래그 변수가 항상 true 값을 가지기 때문에 오류 콜백이 작동하지 않습니다. 편집 : URL에서 문제가 발생하여 해결했습니다. –

+0

EDIT2 : 이제 다른 오류가 발견되었습니다. 루프가 이미지를 찾고있을 때 'x'가 내 이미지에없는 숫자와 같으면 URL을 성공으로 가져오고 오류 콜백을 호출합니다. –

관련 문제