2017-03-17 1 views
3

보고서로 드릴 다운하기 위해 필터를 만들고 있습니다. 다른 필드 (다중 선택 목록) 선택에 종속 된 두 개의 필드가 있습니다. 해당 다중 선택 필드에서 내 선택을하면 매개 변수가 배열로 전달되어 궁극적으로 인식되지 않는 것처럼 보입니다.함수에 대한 매개 변수가 필요하지만 전달되지 않았습니다.

function getMO() 
{ 
    var fa_code = $('#tslcFilterFA').val(); 
    var ao_code = $('#tslcFilterAO').val(); 
    var wq_code = $('#tslcFilterWQ').val(); 
    var newOption = ''; 
    $('#tslcFilterMO').empty(); 
    $('#tslcFilterMO').append(newOption); 
    $('#TSLC_MO_Loading').css('display','inline'); 

    $.ajax({ 
     url: '../TSLC/getData.cfc', 
     type:"POST", 
     cache: false, 
     dataType: "text", 
     async:true, 
     data: {method: "getMO", 
      fa_code: fa_code, 
      ao_code: ao_code, 
      wq_code: wq_code 
     }, 
     success: function(returnMsg) 
      { 

       try 
       { 
        var obj = JSON.parse(returnMsg); 
        $.each(obj.DATA, function(index,row) { 
         if (obj.DATA.length == 1) 
         { 
          var newOption = '<option selected="selected" value="' + row[0] + '">' + row[1] + '</option>'; 
         } 
         else 
         { 
          if (row[2] == "1") 
          { 
           var newOption = '<option selected="selected" value="' + row[0] + '">' + row[1] + '</option>'; 
          } 
          else 
          { 
           var newOption = '<option value="' + row[0] + '">' + row[1] + '</option>'; 
          } 


         } 

         $('#tslcFilterMO').append(newOption); 


        }); 
        try 
        { 
         $('#tslcFilterMO').multiselect('destroy'); 
        } 
        catch(e) {} 
        $('#tslcFilterMO').multiselect({ 
         selectedList: 4 
         }).multiselectfilter(); 
        $('.ui-multiselect').css('width','225px'); 
        $('#TSLC_MO_Loading').css('display','none'); 

       } 
       catch(e) 
       { 
        alert('getMO Error parsing JSON'); 
       } 



      }, 
     error: function(httpRequest, textStatus, errorThrown) 
       { 
        alert("getMO status=" + textStatus + ",error=" + errorThrown); 
      } 
     }); 
    } 

내가 이것을 변경 시도했다 : 내 매개 변수가 내가 생각하고 배열로 전달되는 것처럼이 문제

Browser Debug Screen

자바 스크립트 코드입니다 보인다 라인이에

var ao_code = $('#tslcFilterAO').val(); 

:

,
var ao_code = $('#tslcFilterAO').multiselect('getChecked').map(function() {return this.value;}).get(); 

또한 ao_code 변수를 URLDecode()에 랩핑하여 배열 대신 값을 문자열로 전달하는지 확인했지만 어느 것도 작동하지 않습니다. (구성 요소에서)

CF 코드 :

<cffunction name="getMO" access="remote" returntype="any" returnformat="plain" hint="Get distinct Managing Orgs based on FA=ATT_IT and AO"> 
    <cfargument name="fa_code" type="string" required="true"> 
    <cfargument name="ao_code" required="true"> 
    <cfargument name="wq_code" required="true"> 

    <cfquery name="qMO" datasource="#request.dbdsn_ic4p#" username="#request.dbuser_m66266#" password="#request.dbpw_m66266#"> 
     SELECT DISTINCT managing_org MANAGING_ORG, DECODE(managing_org,'*','*ALL*',managing_org) MANAGING_ORG_DISPLAY, DECODE(managing_org,'*',1,2) sortcol 
     <cfif #fa_code# NEQ "ATT_IT"> 
      FROM HAS_TICKET_STATE_GUI_LOOKUP 
      WHERE client_id = '#fa_code#' 
     <cfelse> 
      FROM IT_TICKET_STATE_GUI_LOOKUP 
      WHERE 1=1 
     </cfif> 
     <cfif #ao_code# neq ""> 
      AND active_org IN (<cfqueryparam value="#ao_code#" cfsqltype="cf_sql_varchar" list="true" />) 
     </cfif> 
     <cfif #wq_code# neq ""> 
      <!--- !COM: is workaround for commas in listbox items! ---> 
      AND work_queue IN (#replace(ListQualify(wq_code,"'",",","CHAR"),":COM!",",","all")#) 
     </cfif> 
     ORDER BY 3, 1 
    </cfquery> 

    <cfreturn serializeJson(qMO)> 
</cffunction> 
+0

는 질문과 관련,하지만 active_org에 사용되는 CFQUERYPARAM 태그 work_queue을 위해 똑같이 잘 작동하지 않습니다. –

+0

전통적인 옵션일까요? –

답변

-1

당신은 jQuery를 serializeArray() 기능과 param() 기능의 조합을 생각 해 봤나? 쉽게 파싱 할 수있는 쿼리 문자열과 비슷한 문자열을 만듭니다. 전체 양식을 보낼 수 있습니다.

예 : $ .param ($ ('# yourform'). serializeArray(), false);

아니면 serializeArray 함수를 사용하여 함수에 JSON 문자열을 보내면됩니까?

3

변경하여 JS 코드에서이 줄

var ao_code = $('#tslcFilterAO').val(); 

당신은 당신의 기능에 기대하고있는 여러 선택 필드에서 당신에게 문자열 값의 목록을 제공한다

var ao_code = $('#tslcFilterAO').val().join(","); 

에 CFC.

join() 메서드는 배열의 모든 요소를 ​​문자열로 결합합니다. More on "join" here. 이 문서는 내 문제를 해결 도움이

+0

데이터 자체에 쉼표가 포함되어 있지만 join() 및 cfqueryparam과 함께 다른 구분 기호를 사용해야합니다. – Leigh

+0

고마워요. – Vince

0

... https://christierney.com/2011/06/07/returning-multiple-value-elements-to-coldfusion-remote-method-via-jquery-ajax/

function getWQ() 
{ 
var fa_code = $('#tslcFilterFA').val(); 
var ao_code = $('#tslcFilterAO').val(); 
if ($.isArray(ao_code)) 
    var ao_code_array = ao_code.join(","); 
else 
    var ao_code_array = ao_code; 
var mo_code = $('#tslcFilterMO').val(); 
if ($.isArray(mo_code)) 
    var mo_code_array = mo_code.join(","); 
else 
    var mo_code_array = mo_code; 
var newOption = ''; 
$('#tslcFilterWQ').empty(); 
$('#tslcFilterWQ').append(newOption); 
$('#TSLC_WQ_Loading').css('display','inline'); 

$.ajax({ 
    url: '../TSLC/cfcs/getData.cfc', 
    type:"POST", 
    cache: false, 
    dataType: "text", 
    async:true, 
    data: {method: "getWQ", 
     fa_code: fa_code, 
     mo_code: mo_code_array, 
     ao_code: ao_code_array 
    }, 
    success: function(returnMsg) 
    { 
+0

당신의 링크가 실패한다면, 당신의 코드에 코멘트가 주어져야 왜 이것이 어떻게 OP의 질문에 답할 수 있는지 설명해야합니다. – Mike

관련 문제