2011-08-14 8 views
1

ColdFusion 9 및 jQuery를 사용하고 있습니다. 나는 CFAJAXPROXY를 사용하고있다.jQuery에서 CFC 반환 변수에 액세스하는 방법?

jQuery 객체에 반환 된 데이터에 액세스하는 데 문제가 있습니다.

이 내 jQuery 코드의 일부입니다 연합사의

var jro = new jsApp(); 
NewUser = jro.addUser(NewEmail); 

방법은 ADDUSER입니다. 이메일 주소 (NewEmail)를 전달하면 새 사용자의 UserID가 반환됩니다.

연합 사령부에서이 쿼리는 잘 작동합니다 : 나는 동적를 사용하려고하면

<cfset NewUser = 10> 
<cfreturn NewUser> 

:

<cfquery name="GetUserID"> 
SELECT  MAX(UserID) as MaxID 
FROM  Users 
</cfquery> 

내가 하드 코딩이 같은 값이 나는 문제가 발생하지 않는 경우 이 변수는 JSON 오류가 발생합니다.

<cfset NewUser = GetUserID.MaxID> 
<cfreturn NewUser> 

이 오류는 CFC에서 발생하는 것으로 보입니다. 반환 변수를 하드 코딩하지만 쿼리에서 단일 정수를 반환하면 작동하지 않습니다.

쿼리에서 단일 정수를 반환하는 방법은 무엇입니까? 왜이 문제가 발생합니까?

다음은 CFC 호출 방식입니다.

$("#AddUserSave").click(function() { 
    NewEmail = $("#NewEmail").attr("value"); 
    var jro = new jsApp(); 
    UserID = jro.addUser(NewEmail); 
    $("#UserDiv").load("GlobalAdmin/EditUser.cfm?UserID="+UserID); 
}); 

다시, CFC는 데이터베이스에서 사용자 ID를 반환을 거부하지만, 기꺼이 하드 코드 수를 반환합니다.

<cfset NewUser = GetUserID.UserID> 
<cfset NewUser = 1> 
<cfreturn NewUser> 

을하지만이 작동하지 않습니다 :

가 좋아, 내 CFC이 작동

<cfset NewUser = GetUserID.UserID> 
<cfreturn NewUser> 

파이어 버그는 말한다 :

parseJSON throw new SyntaxError("parseJSON"); 
cfajax.js (line 803) 

좋아, 내가 통해이 방법을 액세스 할 때 브라우저에서는 반환되는 정수를 보여줍니다.

<!--- GET MAX USER ---> 
<cffunction name="getMaxUser" access="remote" returnformat="plain" returntype="any"> 
    <cfquery name="GetUserID"> 
     SELECT MAX(UserID) AS MaxID 
     FROM Users 
    </cfquery> 
    <cfreturn createObject('java', 'java.lang.Integer').init(javaCast('int', GetUserID.MaxID)) /> 
</cffunction> 

페이지 소스를 볼 때 maxid는 1 (1/정수)입니다.

연합사는 자바 스크립트에서 호출되는 :

var jro = new jsApp(); 
    jro.getMaxUser(); 

나는이 스크린 샷에서 볼 수 있습니다 무엇입니까 정확한 오류 : 여기

http://evikjames.com/IMAGEs/parsejson.png

그리고 내 프레온의 이미지입니다 .여기

http://evikjames.com/images/CFC.png

메서드에 액세스하는 자바 스크립트에 의해 생성 된 URL의 이미지입니다 :

http://www.evikjames.com/images/error-2.png

을 ++++++++++++++++++ +++++++++++++++++++++++++++++++++++ 답변 자바 스크립트가 설정하는 요청을 만들 필요가

반환 형식은 평이합니다. 기본 반환 형식은 JSON이라고 생각합니다. 자신을 소유 한 JSON의 CFC 초크가 만들어졌습니다.

var jro = new jsApp(); 
jro.setReturnFormat('plain'); 
UserID = jro.getMaxUser(); 

모자를 찰리에게 전달해줍니다. 나는 영원히 감사한다.

+0

Firebug 또는 비슷한 것을 사용하여 반환되는 값이 숫자인지 확인할 수 있습니까? 빠른 테스트를 실행했는데 제대로 작동하는 것 같습니다.하지만 배열 표기법을 사용하여 쿼리 값을 참조해야하는 상황이있었습니다. "'for 예. – charliegriefer

+0

반환되는 값이 없습니다. 는 CFC에서 JSON 오류를 발생시킵니다. 귀하의 생각은 배열/구조/쿼리 대신 단일 값을 반환 할 수있는 것처럼 보이지만 작동하지 않습니다. –

+0

을 할 때 예상대로 작동한다는 것을 확인할 수 있습니까? 그렇다면 문제는 쿼리 값을 참조하는 방법에 문제가 있음을 나타냅니다. – charliegriefer

답변

2

채팅에 따라 부동 소수점이 아닌 정수를 반환하는 원격 액세스가 가능한 메소드가 필요합니다. http://www.threesources.com/archives/009007.html에 신용와

, 당신은 다음을 수행해야합니다

1) 지정 returnFormat =

2) <cfreturn createObject('java', 'java.lang.Integer').init(javaCast('int', GetUserID.MaxID)) />

당으로) 나는 당신이 한 생각하는 ("일반" 그 이유는 "ColdFusion의 숫자 유형이 자동으로 생성 된 RPC WSDL에서 이중으로 매핑됩니다"때문입니다.

해당 사이트는 5 단계를 취해야하지만 위의 2 단계 만 수행하면 정수를 성공적으로 반환 할 수있었습니다.

+0

이 솔루션은 내가 CFC에 액세스 할 때 완벽하게 작동합니다 (http://chat.stackoverflow.com/rooms/2471/discussion-between-evik-james-and-charliegriefer) 브라우저 (http://127.0.0.1:8500/WebSites/ReviewManager/GlobalAdmin/users.cfc?method=addUser&[email protected]). 새 사용자 ID가 반환됩니다. 재부팅 후에도 사이트에서는 작동하지 않습니다. 응. –

+0

"사이트에서 작동하지 않음"보다 더 많은 작업이 필요합니다. 방화범 소리가 무슨 소리 죠? 오류 메시지 (오류가 있다고 가정)는 무엇입니까? – charliegriefer

+0
1

왜 JavaScript 배열로 반환 된 데이터에 액세스하는지 잘 모르겠습니다. 전화를하는 방법을 모르겠지만 번호를 반환하는 것처럼 보입니다. JSON 형식이 어떻게 적용 되나요?

이 작업을 수행 한 이후로 꽤 오랜 시간이 걸렸지 만, 단순히 $ .ajax() 호출을 수행한다면 값이 단순히 "데이터"변수에 포함될 것이라고 생각합니다. 단순히 경고 (데이터) 해 보셨습니까? 번호가 포함되어 있습니까?

[NewUser.DATA [0] [0]을 (를) 호출하면 [[번호]]의 JSON에 해당하는 변수를 NewUser라고 할 수 있습니다.

JavaScript로 전화를 걸 때 JSON이 실제로 어떻게 보이는지 (FireBug 또는 다른 브라우저 디버그 도구에서 볼 수 있습니까?)

관련 문제