2011-04-19 3 views
2

내 페이지의 맨 위 'A-Z'에 알파벳이 있습니다. 사용자가 문자를 클릭하면 선택한 문자를 기반으로 썸네일 이미지 디렉토리에 대한 쿼리를 수행하고 해당 파일 이름의 목록을 반환하는 CFC에 AJAX 호출을 수행합니다.CFC에서 결과를 반환하기 전에 AJAX 쿼리에서 문자열 함수 수행

목록에서 특정 기능을 끄기 위해 파일 이름에 대해 여러 가지 기능을 수행하기 위해 목록에서 함수를으로 사용하고 있습니다. 예를 들어 파일 이름의 형식은 다음과 같습니다.

내 목표는 미리보기 이미지에 레이블을 지정하고 '실제'파일에 대한 링크를 만들 수 있도록 내 CFC에서 성, 이름 및 번호를 추출하는 것입니다. lastname_firstnameIMG_1234_CMYK.tif 등 다운로드 ...

원래는 split()을 사용하여 반환 된 목록과 함께 작동하는 AJAX 기능을 구축했지만 IE에서 오류가 발생합니다. 문제를 완화하기 위해 내 CFC에서 문자열 함수를 수행하고 데이터를 준비 상태로 되돌릴 것입니다.

데이터 구조체를 반환하기 전에 CFC에서 문자열 함수를 어떻게 수행합니까?

편집이 설정은 Safari와 FF로 유명하지만 IE에서는 오류가 발생했습니다. 나는 split() 함수를 수정하려고 시도했지만 약간의 성공을 거두었지만 물론 FF로 제대로 작동하지 않았다. 다시 말하지만, 제 목표는 자바 스크립트 문자열 개조를 제거하고 CFC에서 수행하는 것입니다.

$('.lastname').click(function(e){ 
    e.preventDefault(); 
    $('#emptymessage').hide(); 
    $('#searching').show(); 
    $('#content').html(""); 
    var alpha = $(this).attr('id'); 
    $.getJSON("cfcengine.cfc?method=List&returnformat=json&queryFormat=column", 
     {letter:alpha}, 
     function(res, code) { 
      var s = ""; 
      if(res.message.ROWCOUNT > 0) { 
      $('#searching').hide(); 
      for(var i=0; i<res.message.ROWCOUNT; i++) { 
      //This is all the stuff I want to get rid of... 
      var theFile = res.message.DATA.Name[i] 
      var theLastName = theFile.split(/_(.+)/)[0]; 
      var theRest = theFile.split(/_(.+)/)[1]; 
      var theFirstNameAll = theRest.split(/_(.+)/)[0]; 
      var theFirstName = theFirstNameAll.split(/(?:IMG)/)[0]; 
      var theImageAll = theRest.split(/_(.+)/)[1]; 
      var theImage = theImageAll.split(/_(.+)/)[0]; 
      var bw = theLastName + '_' + theFirstName + 'IMG_' + theImage + '_BW.jpg'; 
      var rgb = theLastName + '_' + theFirstName + 'IMG_' + theImage + '_RGB.jpg'; 
      //Right now I'm just returning the name to the page until debugging is complete... 
          s += '<p>' + res.message.DATA.Name[i] + '<\/p>'; 
      } 
     } else { 
      var s = "Sorry, nothing matched your search."; 
     } 
     $("#content").html(s); 

      //End response 
      } 
     //End getJSON 
     ); 

//End plist click function 
}); 
+0

흠 ..., -1? 세부 정보가 충분하지 않은 잘못된 형식의 질문입니까? 호기심이 많아서 불쾌감을 반복하지 않습니다. – Ofeargall

+0

-1, 내가 마크 업했는지 모르겠다. –

+0

네 ... +1. 나는 왜 누군가가 이것을 투표하고 싶었는지 궁금하다. –

답변

1

자바 스크립트를 들어, 나는 멀리 할 것 :

<cffunction name="List" access="remote" output="no" returntype="struct"> 
<cfargument name="letter" required="yes" type="string"> 
<cfset local = StructNew()> 
<cfset local.response = StructNew()> 
<cfset local.response["error"] = ""> 
<cfset local.response["message"] = ""> 
<cfset local.data = #arguments.letter# & "*.jpg"> 

<cfdirectory 
      action="list" 
      directory="#thumbsdir#" 
      recurse="true" 
      listinfo="name" 
      name="qFile" 
      filter="#local.data#" 
      /> 
      <cfset local.response["message"] = #qFile#> 
    <cfreturn local.response> 
</cffunction> 

그리고 (A document.ready 함수에 싸여 ...) 내 AJAX 기능 : 여기

내 CFC의 정규식 리터럴 및 단순화 split() :

여기
// replace with res.message.DATA.Name[i] 
var theFile = 'lastname_firstnameIMG_1234_RGB.jpg'; 
// ['lastname', 'firstnameIMG', '1234', RGB.jpg'] 
var pieces = theFile.split('_'); 
//lastname 
var theLastName = pieces[0]; 
//firstname 
var theFirstName = pieces[1].slice(0, pieces[1].length - 3); 
//1234 
var theImage = pieces[2]; 

var bw = theLastName + '_' + theFirstName + 'IMG_' + theImage + '_BW.jpg'; 
var rgb = theLastName + '_' + theFirstName + 'IMG_' + theImage + '_RGB.jpg'; 

// lastname_firstnameIMG_1234_BW.jpg' 
alert(bw); 
// lastname_firstnameIMG_1234_RGB.jpg' 
alert(rgb); 

내가에서 그것을 할 거라고 방법 (210) 다음은 _ 정말 귀하의 경우 구분자 역할을하기 때문에

theFile = 'lastname_firstnameIMG_1234_RGB.jpg'; 
// ['lastname', 'firstnameIMG', '1234', RGB.jpg'] 
pieces = theFile.split('_'); 
//lastname 
theLastName = pieces[1]; 
//firstname 
theFirstName = left(pieces[2], len(pieces[2]) - 3); 
//1234 
theImage = pieces[3]; 

bw = theLastName & '_' & theFirstName & 'IMG_' & theImage & '_BW.jpg'; 
rgb = theLastName & '_' & theFirstName & 'IMG_' & theImage & '_RGB.jpg'; 

// lastname_firstnameIMG_1234_BW.jpg' 
writeOutPut(bw & "<br/>"); 
// lastname_firstnameIMG_1234_RGB.jpg' 
writeOutPut(rgb); 
+0

그럼 ''이상의 자바 스크립트를 선택 하시겠습니까? JavaScript를 사용하는 것은 약간의 총기 수줍음이라 생각합니다. 왜냐하면 브라우저간에 불규칙성이 있기 때문입니다. – Ofeargall

+0

@Ofeargall : IE 9에서만 JS를 시도했지만 정상적으로 작동했습니다. 그래서 나는 최소한의 저항의 길을 선택하고 JS 변화로 시작하여 그것이 어떻게 작동하는지 살펴볼 것입니다.그렇지 않은 경우 CF로 전환하십시오. – orangepips

0

이의 ColdFusion에서 조각이

ListFirst(list [, delimiters, includeEmptyValues ]) 

사용하여 단 한 줄의 코드에서 수행 할 수있다.

List First 및 ListLast는 매우 편리한 기능입니다.

관련 문제