ColdFusion - Как получить доступ к возвращаемым переменным CFC в jQuery? - PullRequest
1 голос
/ 14 августа 2011

Я использую ColdFusion 9 и jQuery.Я использую CFAJAXPROXY.

У меня проблемы с доступом к данным, возвращенным в объект jQuery.

Это часть моего кода jQuery:

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

Методв CFC есть addUser.Я передаю адрес электронной почты (NewEmail) и получаю обратно UserID нового пользователя.

Этот запрос в CFC работает просто отлично:

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

Когда я жестко кодирую значение, подобное этому, У меня нет проблемы:

<cfset NewUser = 10>
<cfreturn NewUser>

Когда я пытаюсь использовать такую ​​динамическую переменную, я получаю сообщение об ошибке 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 отказывается возвращать UserID из базы данных, но с радостью возвращает жестко закодированный номер.

Хорошо, в моем CFC это работает:

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

Но это НЕ работает:

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

Firebug говорит:

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>

Когда я просматриваю исходный код страницы, максимальное значение равно 1 (одно / целое число).

CFC вызывается в JavaScript:

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

Точную ошибку, которую я получаю, можно увидеть на этом снимке экрана:

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

И вотизображение моих ХФУ.

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

Вот изображение URL, созданного JavaScript для доступа к методу:

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

+++++++++++++++++++++++++++++++++++++++++++++++++++++ ОТВЕТ

JavaScript должен создать запрос, который устанавливает формат возврата равным обычному.Я думаю, что его тип возвращаемого значения по умолчанию - JSON.ХФУ душит JSON, который он сам создал.

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

Снимаю шляпу перед Чарли, чтобы он все понял.Я всегда благодарен.

Ответы [ 2 ]

2 голосов
/ 15 августа 2011

Согласно нашему чату, вам нужен удаленно доступный метод для возврата целого числа, а не числа с плавающей запятой.

При кредите на http://www.threesources.com/archives/009007.html, вам необходимо сделать следующее:

1) указать returnFormat = "plain" (что, я полагаю, вы сделали)

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

Согласно сайту, указанному выше, причина в том, что "ColdFusion's Numeric"введите map to double в автоматически сгенерированном RPC WSDL ".

На этом сайте перечислены 5 шагов, которые необходимо выполнить, но я смог успешно вернуть целое число, просто выполнив 2 шага, перечисленных выше.

1 голос
/ 14 августа 2011

Я не уверен, почему вы обращаетесь к возвращенным данным в виде массива JavaScript. Я не знаю, как вы делаете свой звонок, но похоже, что вы только возвращаете номер, как проходит форматирование JSON?

Прошло много времени с тех пор, как я это сделал, но если вы просто назначаете вызов $ .ajax (), то я думаю, что значение будет просто в переменной "data". Вы пробовали просто оповещение (данные)? Содержит ли он номер?

Вызывая NewUser.DATA [0] [0], вы говорите, что у вас есть переменная, вызывающая NewUser с эквивалентом JSON [[number]].

Как вы делаете свой вызов в JavaScript и как на самом деле выглядит возвращаемый JSON (вы должны видеть его в FireBug или других инструментах отладки браузера)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...