Domanda

sto chiamando un componente ColdFusion (CFC) utilizzando jQuery.post (). Ho bisogno di una rappresentazione numero intero o stringa del numero restituito per l'utilizzo in un URL.

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

Invece quello che torno è un numero decimale:

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

Necessario per aggiornare il seguente codice HTML:

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

Concettualmente, suppongo che ci sono più risposte:

1) ho potuto utilizzare jQuery per afferrare il numero a sinistra del punto decimale.

2) ho potuto forzare Coldfusion per inviare il numero come una stringa.

3) ho potuto generare tutto il lato server di collegamento e basta sostituire il tag HTML intero collegamento (non è la risposta preferita, ma forse è il migliore)

Qualcuno sa come fare 1 o 2? È di 3 meglio?

Rilevante Javascript: (Non ottimizzata)

$(".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");
});

Il mio 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>
È stato utile?

Soluzione

uso parseInt() in JS. Kindda come la soluzione 1, ma questo è più facile di quanto si pensi.

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

CF serializza qualsiasi intero come 123 in "123.0" per impostazione predefinita, ma di solito non importa in un linguaggio senza tipo come JS, o CF per la materia.

Il comportamento predefinito di SerializeJSON() (quello che utilizza la funzione a distanza), non può essere ignorata, ma se vi piace, è possibile utilizzare uno dei 3rd party libreria JSON da www.riaforge.org

P.S. Anche se si passa a "something.cfm? Id = 123.0", URL.id è solo un valore numerico in CF EQ per 123. Anche se l'URL sembra un po 'strano, se si sta inviando a CF, sarà ancora lavoro.

Altri suggerimenti

E 'un bug / caratteristica SerializeJSON noto (). Vedi questa risposta per una possibile soluzione.

Per inciso, per quando si preferisce utilizzare la soluzione 2) "Io potrebbe costringere Coldfusion per inviare il numero come una stringa", ad esempio quando si utilizza un plugin che si aspetta che le stringhe come dataTable e non voler toccare il codice del client ...

Solo cercando di forzare il numero o una stringa che rappresenta un numero come di seguito non funzionerà:

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

Ma l'aggiunta di uno spazio iniziale forzare il tipo stringa JSON:

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

Hack Hack, ma può tornare utile.

2) ho potuto forzare Coldfusion per inviare il numero come una stringa.

Stai facendo qualsiasi matematica con l'id? Probabilmente no. Per quanto riguarda il tuo jQuery è interessato, questa è una stringa che contiene solo numeri, non è un numero intero. Trattarlo come tale.

Venendo la cosa da un'altra angolazione, se controlli il back-end troppo, si potrebbe provare a forzare ColdFusion per serializzare il numero come un intero, utilizzando javaCast ( "int", someIntegerThatColdFusionThinksIsAFloat).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top