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

时间:2017-03-17 13:41:54

标签: ajax coldfusion multi-select cfml

我正在制作过滤器以深入研究报告。我有两个字段依赖于另一个字段的选择(这是一个多选列表)。当我从多选字段中进行选择时,看起来参数作为数组传入并最终无法识别。看起来好像我的参数作为数组传入,我认为这是问题

Browser Debug Screen

Javascript代码:

requestCancelDecode()

我试图改变这一行:

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中,以查看它是否会将值作为字符串而不是数组传递,但都不起作用。

CF代码(来自组件):

URLDecode()

3 个答案:

答案 0 :(得分:3)

在JS代码中更改此行

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

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

这应该为您提供CFC中函数期望的多选字段中的字符串值列表。

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

答案 1 :(得分: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)
   {

答案 2 :(得分:-1)

您是否考虑过jQuery https://developers.google.com/drive/v3/web/manage-downloads函数和serializeArray()函数的组合?它创建一个类似于查询字符串的字符串,可以轻松解析。你可以发送整个表格。

示例:$ .param($(&#39; #yourform&#39;)。serializeArray(),false);

或者,或许,只需使用serializeArray函数向函数发送JSON字符串?