2013-02-27 4 views
1

JSONutil을 사용하여 jquery와 coldfusion 사이에서 JSON을 serialize/deserialize하는 방법을 이해하려고합니다. coldfusion 7이 붙어있어서 cfc에서 returnformat='json' 속성을 사용할 수 없습니다.jsonutil을 coldfusion7 및 jquery ajax와 함께 사용하는 방법?

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와 아약스 전화 : 이제 어디서 어떻게

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를 사용합니까? http://jsonutil.riaforge.org/

답변

3

(간략한 참고 사항, 제 조언은 먼저 별도로 작동하는 cfc를 얻습니다 .CF 문제를 디버깅하는 것이 훨씬 쉽습니다. cfc가 원하는 JSON 문자열을 반환했음을 확인할 때까지 jquery를 믹스에 추가하지 마십시오.하지만 다시 묻습니다 ...)

유틸리티는 사용하기 쉽습니다. 함수 내부에 인스턴스를 만듭니다. 그런 다음 쿼리 개체를 serializeJSON()에 전달합니다. 마지막으로 결과 문자열을 반환합니다.

주, 함수의 서명은 브라우저에서 직접 CFC를 테스트 할 수 있습니다

<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와) 문자열을 원격 액세스를 지원하고 반환해야합니다 :

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)> 
+0

굉장합니다. 이것은 대단히 나를 도왔다 –

+1

한 가지 더. 방금 쿼리 구문이 꺼져있는 것으로 나타났습니다. '%'는 cfqueryparam 내에 있어야합니다. 즉, WHERE client_name LIKE ' – Leigh

+0

이 있어야합니다. //stackoverflow.com/questions/15140423/coldfusion-and-jquery-ajax –

2

당신이 배열에 querys를 변환하는 방법에 대한도 매우 helpful article by Ben Nadel이 $해서 getJSON

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

사용할 수 있습니다 https://stackoverflow.com/a/6257891/886591를 살펴 보자 :

jsonutil의 사이트

. 질의 작업은 json에서 고통 스러울 수 있으므로 먼저 배열로 변환하는 것이 더 쉽습니다.

+0

감사합니다. –