1

JSONutil を使用して jquery と coldfusion の間で JSON をシリアル化/逆シリアル化する方法を理解しようとしています。私はcoldfusion 7で立ち往生しているためreturnformat='json'、cfcで属性を使用できません.

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/

4

2 に答える 2

3

(簡単な補足として、私のアドバイスは、最初に 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>

ブラウザで (または を使用してcfinvoke) cfc を直接テストできます。

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

ただし、クエリのネイティブ表現は少し厄介です。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)>
于 2013-02-27T23:21:49.917 に答える
2

$getJSON を使用できる https://stackoverflow.com/a/6257891/886591 をご覧ください

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

クエリを配列に変換することに関するBen Nadel による非常に役立つ記事もあります。json でのクエリの操作は面倒な場合があるため、最初にクエリを配列に変換する方が簡単です。

于 2013-02-27T22:38:38.563 に答える