Как заставить Coldfusion cfc выводить числовые данные через JSON в виде строки? - PullRequest
4 голосов
/ 19 марта 2010

Я вызываю компонент Coldfusion (cfc), используя jQuery.post (). Мне нужно целочисленное или строковое представление числа, возвращаемого для использования в URL.

{"PAGE":"My Page Title","ID":19382}
or
{"PAGE":"My Page Title","ID":"19382"}

Вместо этого я получаю десятичное число:

{"PAGE":"My Page Title","ID":19382.0}

Необходимо обновить следующий HTML:

<a href="page.cfm?id=19382" id="pagelink">My Page Title</a>

Концептуально, я полагаю, есть несколько ответов:

1) Я мог бы использовать jQuery, чтобы получить число слева от десятичной точки.

2) Я мог бы заставить Coldfusion отправить число в виде строки.

3) Я мог бы сгенерировать всю сторону сервера ссылок и просто заменить весь тег HTML ссылки (не самый лучший ответ, но, возможно, он самый лучший)

Кто-нибудь знает, как сделать 1 или 2? 3 лучше?

Соответствующий Javascript: (не оптимизирован)

$(".link").live('click', function () {
    var $linkID, serviceUrl;
    serviceUrl = "mycfc.cfc?method=getPage";
    $linkID = $(this).attr("rel");

    $.post(serviceUrl, { linkid: $linkID }, function (result) { 
        $('#pagelink').val(result.TITLE);
        if (result.FMKEY.length) {
             // NEED the ID number WITHOUT the .0 at the end
             $('#pagelink').attr("href") = "page.cfm?id=" + result.ID;
             $('#pagelink').text(result.TITLE);
        }
    }, "json");
});

Мой ХФУ:

<component output="no">
<cfsetting showdebugoutput="no">
<cffunction name="getPage" access="remote" returnFormat="JSON" output="no" hint="Looks up a Page Title and ID">
    <cfargument name="linkID" type="string" required="yes">
    <cfset var page = queryNew("id,title")>
    <cfset var result = structNew()>
    <cfquery datasource="myDatasource" name="page">
        SELECT TOP 1 id, title
        FROM pages
        WHERE linkID = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.linkID#">     
    </cfquery>
    <cfif page.recordcount>
        <cfset result.id = page.id>
        <cfset result.title = page.title>
    </cfif>
    <cfreturn result>
</cffunction>
</component>

Ответы [ 5 ]

8 голосов
/ 19 марта 2010

Это известная ошибка / функция SerializeJSON (). См. этот ответ для возможного обходного пути.

4 голосов
/ 19 марта 2010

используйте parseInt() в JS. Вроде как ваше решение 1, но это проще, чем вы думаете.

$('#pagelink').attr("href") = "page.cfm?id=" + parseInt(result.ID, 10);

CF по умолчанию сериализует любое целое число, например 123, в "123.0", но обычно это не имеет значения на языке без типов, например, JS или CF.

Поведение по умолчанию SerializeJSON() (которое использует удаленная функция) не может быть переопределено, но если вы хотите, вы можете использовать одну из сторонних библиотек JSON с www.riaforge.org

p.s. Даже если вы перейдете к файлу "thing.cfm? Id = 123.0 ", URL.id - это просто числовое значение в CF, которое равно EQ до 123. Хотя ваш URL выглядит немного странно, если он отправляет в CF, он все равно будет работать .

1 голос
/ 11 декабря 2012

Кроме того, если вы предпочитаете использовать решение 2) «Я мог бы заставить Coldfusion отправлять число в виде строки», например, при использовании плагина, который ожидает строки типа dataTable и не хочет касаться клиентского кода ...

Просто попытка заставить число или строку, представляющую число, как показано ниже, не будет работать:

Test["caseSensitiveName"] = "#numericString#";

Но добавление начального пробела приведет к принудительному типу строки JSON:

Test["caseSensitiveName"] = " #numericString#";

Взломать взломать взломать, но может пригодиться.

0 голосов
/ 16 октября 2014

Если взглянуть на это с другой стороны, если вы также управляете серверной частью, вы можете попытаться заставить ColdFusion сериализовать число как целое число, используя javaCast ("int", someIntegerThatColdFusionThinksIsAFloat).

0 голосов
/ 19 марта 2010

2) Я мог бы заставить Coldfusion отправить число в виде строки.

Вы занимаетесь математикой с идентификатором?Возможно нет.Что касается вашего jquery, это строка, которая содержит только цифры, а не целое число.Относитесь к нему как к такому.

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