使用AJAX填充选择列表
所以我是一个真正的JQUERY新手,所以请放轻松我。
我想使用从CFC返回的数据填充CFSELECT。 这是我的工作CFC:
select description from service_descriptions where description "ADD NEW" order by description
以下是我的CFC数据的返回方式:
—->从列表中选择<—-备份MaintenanceMalware RemovalMonthly Server MaintenanceNetwatch Alert – 高CPU使用率Netwatch警报 – CNetwatch备份上的磁盘空间不足AlertNew员工培训每月在工作站上进行调整测试测试2测试4测试每周一次维护白名单请求
我正在使用我的AJAX代码来填充我的CFSELECT表单元素。
ADD NEW
这是我到目前为止用我的AJAX但它不起作用。
$(document).ready(function CheckAjaxCall() { $.ajax({ type:'POST', url:'cfcs/get_descriptions.cfc?method=getDescriptions', dataType:'json', cache:false, success:function(customDescriptions){ $('##descriptionDD4').get(0).options.length = 0; $('##descriptionDD4').get(0).options[0] = new Option("--Select--", "0"); $.each(description, function(i,item) { $('##descriptionDD4').get(0).options[$('##descriptionDD4').get(0).options.length] = new Option(item[i].Name, item[i].roll); // Display Value }); }, //error:function(){alert("Connection Is Not Available");} }); return false; });
任何帮助将不胜感激。 谢谢。 布赖恩
注意:默认情况下,CF序列化查询的方式很糟糕。 从长远来看,你可能想要自己滚动并返回更典型(和直观)的东西,就像一组结构。 但是,仍然值得理解为什么你当前的代码不起作用,IMO。
问题:
正如斯科特指出的那样 ,最大的问题是你的javascript代码需要一种格式,但你的cfc会返回不同的格式。 您需要更改其中一个,因此它们都是同步的。 另外,正如我在评论中提到的,使用cfselect
并不会在这里购买任何东西,所以只需使用普通的html select
。
调试:
在您对CFC的响应做任何事情之前,您需要了解它发回的格式。 简单地开始。 只需在页面加载时调用cffunction
并将响应记录到控制台。 在工作之后,您可以稍后将所有内容包装在函数中。
使用FF的Web控制台,您将看到结果是包含两个键的结构: COLUMNS
和DATA
。
DATA
是一个包含查询结果的多维数组。 它由行号和列号索引。 你可以循环遍历它,就像在CF中一样。 唯一的区别是索引将基于零(当然,JS中的键名称区分大小写)。 将以下代码添加到您的success
函数中,您将看到Web控制台中显示的查询值。
// display values for debugging purposes for (var i = 0; i < response.DATA.length; i++){ console.log("value in row ["+ i +"] column [0] = "+ response.DATA[i][0]); }
用法:
一旦了解了如何访问数据,只需使用它来填充列表即可。 您可以使用for
循环单独附加选项,也可以使用此处描述的方法将 DATA
数组插入$.each
函数。 由于您的查询仅返回单个列,因此我将其用于选项文本和值。
$.each(response.DATA, function(i, row){ // get value in first column ie "description" var description = row[0]; // append new option to list $("#descriptionDD4").append($('', { value: description, text : description })); });
剩下的就是将ajax调用包装在一个可以在需要的地方调用的函数中。 但你应该能够自己解决这个问题。
希望这有点说明使用jQuery的远程cffunction。