$ .ajax调用ColdFusion组件输出文本不是HTML

时间:2011-12-15 17:51:42

标签: jquery html ajax coldfusion cfc

如果已经回答,我会事先道歉。

我的目标是创建一个分页方案,该方案将变量发送到ColdFusion函数中的查询,该函数抓取X个元素并在我的网页上显示这些记录而不刷新它。因此,为了测试抓取HTML内容并在不刷新的情况下将其显示到屏幕的基本功能,我试图对ColdFusion组件执行简单的AJAX调用,让它返回带有HTML内容的变量,并显示格式化的HTML在我的网页上的div标签内。这是基于我在网上看到的前一个例子,它使用的是cfajaxproxy,虽然这可能是我的问题,但我很惊讶它根本就没有做到它应该做的事情。

我有一个名为testGeneration.cfm的文件,这里是代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Untitled Document</title>

    <!-- call the jQuery library -->
    <script src="jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">

        $(document).ready(function() {
            $("#loadLink").click(function(e) {
                e.preventDefault();
                $.ajax({
                    type: "GET",
                    url: "generateInfo.cfc?method=createHTML",
                    dataType: "html",
                    success: function(message) {
                        $("#mydiv").html(message);
                    }
                });
            });
        });
    </script>
</head>

<body>
    <a href="" id="loadLink">Load Query</a>
    <!-- empty div to load dynamcically generated table into -->
    <div id="mydiv"></div>
</body>

如您所见,它使用CreateHTML方法调用组件GenerateInfo。以下是generateInfo.cfc的代码:

<cfcomponent displayname="Generate HTML" output="false">

<cffunction name="createHTML" displayname="Create HTML" description="Creates HTML to output with jQuery." access="remote" output="false" returntype="string">

    <!--- SET VARIABLE TO RETURN --->
    <cfset VARIABLES.html = "">

    <!--- SAVE CONTENT --->

    <cfsavecontent variable="VARIABLES.html">
    <strong>hello world</strong>
    </cfsavecontent>
    <!--- RETURN SAVED CONTENT --->
    <cfreturn VARIABLES.html>

</cffunction>

现在,当我点击超链接时,它应该将内容显示为

你好世界

相反,它将内容显示为

&lt; strong&gt; hello world&lt; / strong&gt;

我做错了什么?如何让它处理作为coldfusion组件函数中的返回变量发回的HTML?

2 个答案:

答案 0 :(得分:5)

请尝试更改您的$ .ajax调用,看看它是否可以解决您的问题:

$("#mydiv").load("generateInfo.cfc?method=createHTML");

修改

根据您的评论,尝试将其添加到cffunction标记:

returnFormat = "plain"

答案 1 :(得分:2)

我使用此处显示的答案作为一种帮助我的方法,因为答案已经标记,因为我有同样的问题。但是标记的答案没有帮助;造成几个小时的挫折和叹息。这是因为我在cfcontentsave标签中有cfoutput。

以下答案是另一种选择:

cfsavecontent是让我搞砸的事情。如果我想在该区域内进行cfoutput,如:

    <cfquery datasource="whatevs" name="qry_test">
       ...
    </cfquery>

    <cfsavecontent variable="VARIABLES.html">
        <cfoutput>
            <strong>hello world</strong>
            <cfloop query="qry_test">
                #qry_test.col1#
            </cfloop>
        </cfoutput>
    </cfsavecontent>
    <cfreturn VARIABLES.html>
</cffunction>

上述情况不起作用。

解决方法:

    <cfcontent type="plain/text">
        <cfoutput>
            <strong>hello world</strong>
            <cfloop query="qry_test">
                #qry_test.col1#
            </cfloop>
        </cfoutput>
    </cfcontent>
</cffunction>

注意:不需要returnformat属性。不是一个cfreturn。此外,您仍然可以使用

$("#mydiv").html(message);

而不是

$("#mydiv").load("generateInfo.cfc?method=createHTML");