下拉绑定和AJAX

我是ColdFusion的新手,刚开始学习Ajax。 我的问题是我在网上找到了一些很酷的编码来实现两个下拉菜单,其中第二个依赖于从第一个选择的内容。 但目标是从选择查询中提取下拉列表中的所有值。

我正在使用我刚学到的绑定function。 第一次下拉的所有东西都正确拉动。 问题虽然是第二个问题。 我从AJAX记录器获得的错误是"Error invoking: Error Executing Database Query"任何建议将不胜感激。 还要提前感谢您的帮助。

select.cfc

          SELECT DISTINCT CAT_DESC FROM service_table ORDER BY CAT_DESC                   SELECT DISTINCT com_service_code, report_desc FROM service_table WHERE CAT_DESC = #ARGUMENTS.CAT_DESC# ORDER BY report_desc            

以上是处理所有查询的cfc。 此解决方案的主要原因之一是表单中所需的代码的简单性。

  ... Select Category: 
... Select Service:

我搜索了将近2天试图找到查询错误的解决方案。 我知道查询在SQL中有效,所以我认为这个问题与AJAX有关,而且没有为第二次下拉正确实现WHERE子句。

任何建议或建议都会很棒。 此外,如果你以另一种方式做这个解决方案,我也很乐意尝试。 正如我所说,我对这门语言很新。 只有2周。

测试CFC

在将它们插入ajax之前,始终在CF中测试cfc。 你validationcfc没有错误之后,没有必要搞乱绑定,因为如果它在CF中不起作用,它也不适用于ajax。 唯一的区别是错误将更难找到。

正如其他人所说,从小做起。 单独测试查询。 然后转到使用测试CFC,或者只是使用测试值从浏览器调用它:

 http://yourserver/path/to/select.cfc?method=getServiceType2&cat_desc= http://yourserver/path/to/select.cfc?method=getServiceType2&cat_desc=someValue 

错误

关于错误,我们需要查看完整的错误消息以提供更具体的建议。 但是,查看查询/代码可能会导致以下情况:

  1. CAT_DESC是一个varchar列,在这种情况下,您的参数必须用单引号括起来。 否则,数据库会认为参数值是对象名称(表或列)。

     WHERE CAT_DESC = '#ARGUMENTS.CAT_DESC#' 
  2. .. OR CAT_DESC是一个数字列,但您的参数为空。 这将导致无效的sql语句。 您需要确保将有效数字传递给查询(或者,当参数为空时,您可以跳过WHERE子句,具体取决于所需的结果)。 一种常见的方法是使用val()函数将空字符串和其他非数字值转换为零,即:

    WHERE CAT_DESC = #val(ARGUMENTS.CAT_DESC)#

  3. 在第二个查询之后,它看起来也有一个迷路 。 (假设它不是复制/粘贴错误)

  4. 另一件事,你的第二个查询指定datasourcedbtype 。 这两个属性是互斥的。 两者都可能导致语法错误(我还没试过)。 无论哪种方式,您应该只使用其中一个(很可能是datasource )。

SQL注入

也就是说 – 上面的查询很容易被sql注入。 您应该始终在所有变量查询参数上使用来防止sql注入。 它还有其他好处(性能,数据类型检查等)。 但是sql注入保护是Web应用程序中最关键的。

  WHERE CAT_DESC =  

改进

从CF8.0.1 +开始, cfselect可以绑定到查询对象(而不仅仅是数组)。 因此,不是构建数组,只需从函数返回原始查询。

      SELECT TheQueryColumnToDisplay, TheQueryColumnUsedForListValue FROM ... WHERE ...    

然后指定要用于displayvalue属性的列:

   

我的建议是一次做一件事。 根据您的具体情况,

首先,让您的查询使用cfquery标记。

其次,让它在函数内部工作,在函数中将参数传递给函数。

接下来,将函数放在cfc中,并使用cfc页面或通过创建对象并调用函数来调用它。

最后做绑定。

这种方法会使错误更加明显,以便您可以对它们采取一些措施。

其他观察

  1. 使用查询参数。
  2. 尝试将id字段传递给您的查询而不是文本说明