【问题标题】:How to use jsonutil with coldfusion7 and jquery ajax?如何将 jsonutil 与 Coldfusion7 和 jquery ajax 一起使用?
【发布时间】:2013-02-27 22:06:29
【问题描述】:

我正在尝试了解如何使用 JSONutil 在 jquery 和 Coldfusion 之间序列化/反序列化 JSON。我被coldfusion 7卡住了,所以我不能在我的cfc中使用returnformat='json'属性。

client.cfc:

<cfcomponent>
    <cffunction name="GetClientsByName"
        returntype="query" 
        hint="get clients from search term">

        <cfargument name="name" type="string" required="yes">

        <cfquery name="GetClientsByName" datasource="#application.dsn#">
            SELECT client_id, client_name
            FROM Clients
            WHERE client_name LIKE '%' + <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.name#"> + '%'    
        </cfquery>

        <cfreturn GetClientsByName>
    </cffunction>
</cfcomponent>

jquery ajax 调用:

function getClients(name){
    $.ajax {
        type: "post"
        url: "/surveymanagement/admin/client.cfc",
        dataType: "json",
        data: {
            method: "GetClientsByName",
            name: name
        },
        success: function(data){
            $("#here").html(data)
        }
    }

现在我在哪里以及如何使用 jsonutil 来让它工作?

jsonutil 的站点: http://jsonutil.riaforge.org/

【问题讨论】:

    标签: jquery ajax json coldfusion coldfusion-7


    【解决方案1】:

    (简要说明,我的建议是先让 cfc 单独工作。这样调试 CF 问题要容易得多。在确认 cfc 返回所需的 JSON 字符串之前,不要将 jquery 添加到混合中。但是返回你的问题...)

    该实用程序易于使用。在您的函数内部,创建它的一个实例。然后将您的查询对象传递给serializeJSON()。最后返回结果字符串。

    注意,你的函数签名必须支持远程访问并返回一个字符串(不是查询)

        <cffunction name="GetClientsByName" access="remote" returntype="string">
            <cfargument name="name" type="string" required="yes">
    
            <!--- always localize function variables --->
            <cfset var util = createObject("component", "path.to.JSONUtil")>
            <cfset var getClientsByName = "">
    
             .... run cfquery .....
    
            <!--- return JSON string --->   
            <cfreturn util.serializeJSON(getClientsByName)>
    
        </cffunction>
    

    您可以直接在浏览器中测试 cfc(或使用cfinvoke):

        http://localhost/path/to/client.cfc?method=getClientsByName&name=foo
    

    但是,查询的本机表示在 IMO 中有点尴尬。正如 Lance 所提到的,您可能更喜欢返回一个结构数组,这是更标准的。

         <cfset var results = arrayNew(1)>
         <cfset var elem = "">
         ... run query ...  
    
         <cfloop query="getClientsByName">
              <cfset elem = structNew()>
              <cfset elem["client_id"] = getClientsByName.client_id>
              <cfset elem["client_name"] = getClientsByName.client_name>
              <cfset arrayAppend(results, elem)>
          </cfloop>
    
          <cfreturn util.serializeJSON(results)>
    

    【讨论】:

    • 太棒了。这对我帮助很大
    • 还有一件事。我刚刚注意到您的查询语法已关闭。 % 应该在 cfqueryparam 中,即 WHERE client_name LIKE &lt;cfqueryparam value="%#arguments.name#%" cfsqltype="cf_sql_varchar"&gt;
    • 也许您可以进一步帮助解决我刚刚提出的这个新问题:stackoverflow.com/questions/15140423/coldfusion-and-jquery-ajax
    【解决方案2】:

    看看https://stackoverflow.com/a/6257891/886591你可以使用$getJSON

    $.ajax({
      dataType: "json",
      url: url,
      data: data,
      success: success
    });
    

    还有一个很helpful article by Ben Nadel关于将查询转换为数组。由于在 json 中使用查询可能会很痛苦,因此首先将它们转换为数组会更容易

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-02
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 2018-07-05
      相关资源
      最近更新 更多