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