【问题标题】:How do I pass a query to a cfc function via Jquery?如何通过 Jquery 将查询传递给 cfc 函数?
【发布时间】:2016-07-07 19:52:54
【问题描述】:

如何通过 jQuery Ajax 将 ColdFusion 查询对象传递给我的 cfc 函数?像这样运行 cfquery 后,我正在进行 ajax 调用:

<cfoutput query="data">
    <script type="text/javascript">
       $.ajax({
          url: '/test.cfc',

          data:{
            q: #data#, //is this how i pass it?
            method: "getData"
          },
          success: function(data) {
           console.log(data);
          }
      });
   </script>
</cfoutput>

这似乎传递给我的函数,但我收到一个 CF 错误,上面写着:

复杂对象类型不能转换为简单值。

控制台显示“输入意外结束”。当我点击它时, 它在我的 ajax 调用中突出显示 q 表达式,其值为:

<!-- " ---></TD></TD></TD></TH></TH></TH></TR></TR></TR></TABLE></TABLE></TABLE></A></ABBREV></ACRONYM></ADDRESS></APPLET></AU></B></BANNER></BIG></BLINK></BLOCKQUOTE></BQ>......

我的 cfc 函数被调用,我定义了一个同名的参数。

<cfargument name="q" type="query" required="true" />

我想我的问题是我遗漏了什么或者我没有正确传递查询?

【问题讨论】:

  • 你为什么要这样做?通常情况正好相反。
  • ...意思是,“遍历这个查询中的记录并输出这个内容”。我不认为那是你要做的。你能更新并告诉我们你需要在你的演示代码中发生什么吗?您通常会使用 Ajax 从浏览器收集数据并将其发送到服务器。 CFQUERY 在服务器上运行,因此您可以在创建后将结果传递给您想要的任何其他 CF 函数,然后再将数据输出到浏览器。
  • 将您传递的任何查询移动到 cfc 中的另一个方法。然后从您要生成 json 的地方调用该方法。
  • (编辑)@surgiie - 这一切都应该在服务器端完成。创建一个运行查询并根据需要格式化结果的函数。然后对该函数进行ajax调用。关于如何重新格式化查询结果的大量现有线程,例如 stackoverflow.com/questions/7814575/… stackoverflow.com/questions/14466754/…
  • FWIW,我有一个 GitHub 存储库,可以帮助将 ColdFusion 查询对象转换为更标准的 JSON 格式。 github.com/iknowkungfoo/cfquery-to-json

标签: jquery ajax coldfusion arguments


【解决方案1】:

我相信您正在寻找 SerializeJSON 函数。

<cfoutput query="data">
    <script type="text/javascript">
       $.ajax({
          url: '/test.cfc',

          data:{
            q: #SerializeJSON(data)#, //is this how i pass it?
            method: "getData"
          },
          success: function(data) {
           console.log(data);
          }
      });
   </script>
</cfoutput>

更多:http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-79fa.html

【讨论】:

  • 虽然技术上可行,但通过 ajax 将查询 back 传递给服务器是此任务的错误方法(请参阅问题下方的 cmets)。工作应该在服务器端完成。
  • 好的,我明白了,但是 serializeJSON() 不会以更标准的 JSON 格式返回我的查询,我可以将其与 jquery-bootgrid.com 一起使用
【解决方案2】:

也许需要更多的手册?我必须这样做才能让事情工作一次......

<cfsavecontent variable="myOutput">{"QUERY":{"COLUMNS":["ID","BRANDID","CODE","ITEMNO","NAME","SIZE","UNIT","OUNCES","PRICE","DATETIME","USED"],"DATA":[<cfoutput query="parts" maxRows="#arguments.pageSize#">["#ID#","#BRANDID#","#CODE#","#ITEMNO#","#NAME#","#SIZE#","#UNIT#","#OUNCES#","#PRICE#","#datetime#",<cfif
        used gte 1>"Yes"<cfelse>"No"</cfif>]<cfif (currentRow neq recordCount) and (currentRow mod arguments.pageSize neq 0)>,</cfif></cfoutput>]},<cfoutput>"TOTALROWCOUNT":#result_count.totalRecords#}</cfoutput></cfsavecontent>

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多