函数的参数是必需的,但未传入

The parameter to the function is required but was not passed in

我正在制作过滤器以深入查看报告。我有两个字段取决于另一个字段的选择(这是一个多选列表)。当我从那个多选字段中进行选择时,看起来参数是作为数组传入的,但最终没有被识别。看起来好像我的参数是作为数组传入的,我认为这是问题所在

Javascript代码:

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);
             }
        });
    }

我尝试更改此行:

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>

您是否考虑过 jQuery serializeArray() function and the param() 功能的组合?它创建一个类似于查询字符串的字符串,该字符串很容易被解析。您可以将整个表格发送进来。

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

或者,也许只是使用 serializeArray 函数向您的函数发送一个 JSON 字符串?

在您的 JS 代码中更改这一行

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

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

这应该会为您提供来自多个 select 字段的字符串值列表,您希望在 CFC 的函数中使用。

join() 方法将数组的所有元素连接成一个字符串。 More on "join" here

这篇文章帮我解决了我的问题...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)
   {