我需要Coldfusion来轻松处理从AJAX调用返回的JSON数据

时间:2012-09-06 19:15:06

标签: jquery ajax coldfusion coldfusion-9 cfc

我对远程CFC进行了AJAX调用并使用JSON获取数据,这是我喜欢的,但是我无法输出数据而无需使用硬编码索引值猜测结构索引,例如:$(' #result')。val(obj.DATA [0] [3]);

如果我在CFC中更改查询时对[3]等索引进行硬编码,则必须更改AJAX结果。所以我想通过colmn名称引用返回的数据,但无法弄明白。这是我的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] );
                }
            }

        });

CFC:

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

结果:

This is the result from the CFC

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

您还可以使用SerializeJSON(data,true)以JSON的形式返回查询,并将列名称作为每行数据中的键。所以在你的cfc中,删除returnformat =“JSON”,并替换

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