$ .ajax Вызов компонента ColdFusion выводит текст, а не HTML - PullRequest
1 голос
/ 15 декабря 2011

Я заранее прошу прощения, если на этот вопрос уже был дан ответ.

Моя цель - создать схему разбиения на страницы, которая отправляет переменные в запрос в функции ColdFusion, которая захватывает количество элементов X и отображает эти записи на моей веб-странице, не обновляя ее. Поэтому, пытаясь протестировать базовую функцию захвата содержимого HTML и отображения его на экране без обновления, я пытаюсь выполнить простой вызов AJAX для компонента ColdFusion, заставить его вернуть переменную с содержимым 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>

Как вы видите, он вызывает компонент GenerateInfo с методом CreateHTML. Вот код для 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>

Теперь, когда я нажимаю гиперссылку, она должна отображать содержимое как

Привет, мир

Вместо этого он отображает содержимое как

Привет, мир

Что я делаю не так? Как получить его для обработки HTML-кода, возвращаемого в качестве возвращаемой переменной в функции компонента coldfusion?

Tony

Ответы [ 2 ]

5 голосов
/ 15 декабря 2011

Пожалуйста, измените ваш вызов $ .ajax на это и посмотрите, решит ли он вашу проблему:

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

редактировать

На основании вашего комментария попробуйте добавить это в тег cffunction:

returnFormat = "plain"
2 голосов
/ 26 октября 2012

Я использовал ответ, показанный здесь, как способ помочь мне, так как ответ уже был отмечен, и поскольку у меня была точно такая же проблема. Но отмеченный ответ не помог; вызывая несколько часов разочарования и вздохов. Это потому, что у меня есть cfoutput внутри тега cfcontentsave.

Ответ ниже является альтернативой:

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 не нужен. Ни то, ни другое. Кроме того, вы все еще можете использовать

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

вместо

$("#mydiv").load("generateInfo.cfc?method=createHTML");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...