2

我有一个对远程 CFC 的 AJAX 调用,并以我喜欢的方式使用 JSON 取回数据,但是我在输出数据时遇到了麻烦,而不必猜测具有硬编码索引值的结构索引,例如:$('#result' ).val(obj.DATA[0][3]);

如果我硬编码索引,例如 [3],如果我更改 CFC 中的查询,我必须更改 AJAX 结果。所以我想通过列名来引用返回的数据,但无法弄清楚。这是我的 AJAX 和远程 CFC 的结果:

$.ajax({
            url: '/app/components/MailingsReport.cfc',
            //POST method is used
            type: "POST",
            //pass the data 
            data: {
                method: "getCreativeByID",
                creativeID: $('#hdnCreativeID').val(),
                datasource: "shopping_cart",
        queryformat: "column"
                 },
            success: function(response){
                var obj = $.trim(response);
        var obj = jQuery.parseJSON(obj);
                //alert("response");
                $('#txtSubject').val( obj.COLUMNS["SUBJECT"][0] );
                }
            }

        });

氟氯化碳:

<!---gets the data for the creative--->
    <cffunction name="getCreativeByID" returntype="any" returnformat="JSON" access="remote" output="No">
        <cfargument name="creativeID" required="Yes" type="numeric" />
        <cfargument name="datasource" required="Yes" type="string" />

        <!--- Select creatives and {clickurl} --->
        <cfquery name="qGetCreativeData" datasource="#arguments.datasource#">
            exec sp_get_email_creative @creativeid = #arguments.creativeID#
        </cfquery>

        <cfreturn qGetCreativeData />

    </cffunction>

结果:

这是 CFC 的结果

任何帮助,将不胜感激!谢谢。

4

2 回答 2

2

这适用于除 IE8 及以下版本之外的所有内容。如果您需要完全兼容,您可以编写自己的 indexOf JS 方法。

$('#result').val( obj.DATA[0][ obj.COLUMNS.indexOf('Creativename') ] );

如果你需要它,这个页面有关于在不直接支持它的浏览器中将 indexOf 添加到数组原型的说明:http ://www.tutorialspoint.com/javascript/array_indexof.htm

于 2012-09-06T20:36:32.040 回答
0

您还可以使用 SerializeJSON(data, true) 以 JSON 格式返回查询,其中列名作为每行数据的键。因此,在您的 cfc 中,删除 returnformat="JSON",然后替换

在您的 JavaScript 代码中,您现在应该能够逐行遍历返回的 JSON 字符串的数据部分,并通过列名引用这些值。

于 2012-11-30T15:34:23.300 回答