4

jQuery.post() を使用して Coldfusion コンポーネント (cfc) を呼び出しています。URL で使用するために返される数値の整数または文字列表現が必要です。

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

代わりに、10 進数が返されます。

{"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");
});

私の CFC:

<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>
4

5 に答える 5

8

これは既知の SerializeJSON() バグ/機能です。考えられる回避策については、この回答を参照してください。

于 2010-03-19T20:15:47.387 に答える
4

parseInt()JSで使用します。あなたの解決策1のようなものですが、これはあなたが思っているよりも簡単です.

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

CF はデフォルトで 123 のような整数を "123.0" にシリアル化しますが、通常は JS のような型のない言語や CF では問題になりません。

(リモート関数が使用するもの)のデフォルトの動作はSerializeJSON()オーバーライドできませんが、必要に応じて、www.riaforge.org からサードパーティの JSON ライブラリのいずれかを使用できます。

ps "something.cfm?id=123.0" にブラウズしても、それURL.idは 123 に相当する CF の数値にすぎません。URL が少し変に見えますが、CF に投稿しているのであれば、それでも機能します。

于 2010-03-19T20:00:38.093 に答える
1

別の角度から考えてみると、バックエンドも制御する場合は、javaCast("int", someIntegerThatColdFusionThinksIsAFloat) を使用して、ColdFusion に強制的に数値を整数としてシリアル化させることができます。

于 2014-10-16T13:10:31.187 に答える
1

余談ですが、解決策 2) を使用したい場合については、「Coldfusion に数値を文字列として送信させることができます」、たとえば、dataTable のような文字列を期待するプラグインを使用していて、クライアント コードに触れたくない場合などです...

以下のような数値または数値を表す文字列を強制しようとするだけでは機能しません。

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

ただし、先頭にスペースを追加すると、JSON 文字列型が強制されます。

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

ハックハックハックですが、重宝します。

于 2012-12-11T12:44:03.310 に答える
0

2) Coldfusion に数値を文字列として送信させることができます。

IDで計算していますか?おそらくそうではありません。jqueryに関する限り、これは整数ではなく数字のみを含む文字列です。そのように扱ってください。

于 2010-03-19T18:46:51.847 に答える