【问题标题】:Converting a coldfusion variable to be read in Ajax statement转换要在 Ajax 语句中读取的冷融合变量
【发布时间】:2015-11-28 08:10:56
【问题描述】:

我已经编写了这段代码。基本上,它每 2 秒检查一次数据库以查看是否进行了更改。如果没有进行更改,则变量 (CheckMessageCount) 以 0 的值传回,并且没有任何反应。如果进行了更改并且 CheckMessageCount 以 1 的值返回,则 div 会重新加载屏幕上的消息。

我不确定如何将 CheckMessageCount 从 cfm 页面传递回 jquery/ajax,以便可以正确完成 if/else 语句。现在它只是一直去 else 并且什么都不做。

我阅读了如何执行查询字符串,但无法使其工作。我也尝试做this thread 所做的事情,但没有运气。

这是我为带有 Jquery/AJAX 的页面所拥有的内容

<html>
<head>
    <title>Test</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

    <script>
    $.get("homepageresponse2.cfm", function (data) //gets the code behind the page
        { 
            $("#responsecontainer").html(data); //places the data in the budget div
        });

    var CheckMessageCount = 0;

    (function() {
        var reloadthediv = function() {
        $.ajax({
            url: "CheckMessageCount.cfc?method=ReloadMessageCount",
            type: "get",
            datatype: "json"
        })
            .done(function(CheckMessageCount) {
            //if checkmessagecount comes back 1, then reload
            if (CheckMessageCount == 1) {
                $( "#responsecontainer" ).load( "homepageresponse2.cfm" );
            //if checkmessagecount comes back 0, do nothing
            } else {
                //do nothing
                console.log('nothing done')
            } 
        });
    };

    reloadthediv();

    setInterval(function() {
        reloadthediv();
    }, 2000);
    })();
</script>
</head>
<body>
    <div id="responsecontainer" class="responsecontainercss"></div>
</body>
</html>

这就是我所拥有的 CheckMessageCount.cfc

    <cfcomponent displayname="Checks The Message RecordCount to reload" hint="This is the CFC for Checks The Message RecordCount to reload"> 
    <!--- This function gets all user status data for the proper session.id if it exists ---> 
        <cffunction name="ReloadMessageCount" returntype="any" returnformat="json" hint="Gets message count"> 

        <cfquery name="CheckMessages" datasource="hippogriff" debug="No">
        SELECT  COUNT(HomePageMessage_ID) AS TheMessageCount
        FROM    HomePageMessage
        </cfquery>

        <!--- code here for the messagecount --->

        <!--- once it does, let's do this --->
        <cfif CheckMessages.TheMessageCount GT messagecount>
            <cfset CheckMessageCount=1> 
            <cfset messagecount=#CheckMessages.TheMessageCount#>
        <cfelse>
            <cfset CheckMessageCount=0> 
        </cfif> 

        <cfreturn CheckMessageCount> 
    </cffunction> 
</cfcomponent>

据我所知,这差不多。我尝试了 ColdFusion serializeJSON 并没有得到任何东西。我知道现在有 websocket,但是我们的托管公司“不支持在服务器上使用它们”,而且它真的超出了我的编码范围。我很惊讶我能做到这一点。任何帮助将不胜感激。

我知道它是半有效的唯一原因是因为我将 reload 语句放在 JS 的 else 部分并重新加载 div。

【问题讨论】:

  • 我也建议使用 cfc,但使用这种方法,您不会在任何地方输出值 - 您只是在设置它。这就是为什么没有任何东西被发送回 jquery。
  • 另外,CFIF 中messagecount 变量的来源和用途是什么?如果它应该是传递给脚本的某种参数,它必须包含在 ajax 调用中。
  • Dan,我更新了代码以包含 cfc 并更新了 JS,因为我认为我有一些不需要的东西。 Leigh,消息计数在 cfc 中设置,我没有包含代码,因为它可以工作并使 if 语句工作。知道为什么 javascript 无法识别 cfc 传回 0 或 1 吗?
  • @Adam - 消息计数在 cfc 中设置 好的。只要确保它不是应该被传递到进入 cfc .. 因为ajax 调用没有这样做。暂时忽略可能的改进,上面的 $.ajax 调用对我有用&lt;cffunction access="remote" ....&gt;(正如克里斯提到的)。使用浏览器的 javascript 工具查看 ajax 请求和响应发生了什么。
  • 谢谢 Liegh,我会更新代码,看看发生了什么。

标签: javascript jquery ajax coldfusion


【解决方案1】:

最好使用 CFC,但在您的示例中,请在此之前执行此操作

<cfcontent type="application/json">#checkMessageCount#</cfoutput>

这将返回一个 JSON MIME 类型的值。你可以做serializeJSON,但实际上没有什么可以序列化的。

cfcontent 将删除所有间距,因为 reset 属性默认为 0。

您还需要在您的 js 中将“CheckMessageCount”更改为“returnresult”。

请记住,您的解决方案并不是真正可扩展的,并且最终会因任何可观的流量而使您的系统陷入困境。

确保此 CFM 页面的调试已关闭,该页面会返回 JSON,否则会中断。

【讨论】:

  • 它会改变 cfc 中的任何内容吗?我做了一个基本相同的事情,返回是
  • 使用 CFC 可为您的代码提供更多结构。您不会输出 var,而是按您提到的那样返回它。更多的是一种偏好。
  • 克里斯,我更新了 cf 和 js 代码。我意识到我可能在那里有一些错误的 ajax 东西,你能再看一下吗?如果返回为 1,我仍然无法让 javascript 注册。
  • 您必须将 access="remote" 属性添加到功能元素。一个很大的帮助是使用浏览器开发工具,这样您就可以看到传递给它的内容。
  • 谢谢 Chris,我会更新代码,看看发生了什么。
猜你喜欢
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
相关资源
最近更新 更多