Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将coldfusion变量转换为在Ajax语句中读取_Javascript_Jquery_Ajax_Coldfusion - Fatal编程技术网

Javascript 将coldfusion变量转换为在Ajax语句中读取

Javascript 将coldfusion变量转换为在Ajax语句中读取,javascript,jquery,ajax,coldfusion,Javascript,Jquery,Ajax,Coldfusion,我写了这个代码。基本上,它每2秒钟检查一次数据库,看看是否有更改。如果未进行更改,则返回一个值为0的变量CheckMessageCount,但不会发生任何变化。如果进行了更改,并且CheckMessageCount返回值为1,则div会在屏幕上重新加载消息 我不确定的是如何将CheckMessageCount从cfm页面传递回jquery/ajax,以便正确执行if/else语句。现在,它总是去其他地方,什么也不做 我读过如何创建查询字符串,但无法使其工作。我也试着去做已经做过的事情,但是没有运

我写了这个代码。基本上,它每2秒钟检查一次数据库,看看是否有更改。如果未进行更改,则返回一个值为0的变量CheckMessageCount,但不会发生任何变化。如果进行了更改,并且CheckMessageCount返回值为1,则div会在屏幕上重新加载消息

我不确定的是如何将CheckMessageCount从cfm页面传递回jquery/ajax,以便正确执行if/else语句。现在,它总是去其他地方,什么也不做

我读过如何创建查询字符串,但无法使其工作。我也试着去做已经做过的事情,但是没有运气

下面是我对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,但什么都没有得到。我知道现在有WebSocket,但我们的托管公司不支持服务器上的WebSocket,而且它真的超出了我的能力范围。我很惊讶我用这个走了这么远。任何帮助都将不胜感激


我知道它是半工作的唯一原因是,我将reload语句放在JS的else部分,它会重新加载div。

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

<cfcontent type="application/json">#checkMessageCount#</cfoutput>
这将返回一个JSON MIME类型的值。您可以序列化JSON,但实际上没有什么需要序列化的

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

您还需要在js中更改CheckMessageCount以返回结果

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


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

它会更改cfc中的任何内容吗?我已经做了一个基本相同的事情,返回的是使用CFC为您的代码提供更多的结构。您不会输出var,而是像您提到的那样返回它。克里斯,我更新了cf和js代码。我意识到我可能有一些错误的ajax的东西在那里,你能再看看吗?如果返回值为1,我仍然无法让javascript注册。您必须向函数元素添加access=remote属性。一个很大的帮助是使用浏览器开发工具,这样你就可以看到返回给它的内容。谢谢Chris,我会更新代码,看看发生了什么。我也建议使用cfc,但使用这种方法,你不会在任何地方输出值-你只是简单地设置它。这就是为什么没有任何东西被发送回jquery。另外,CFIF中messagecount变量的来源和用途是什么?如果它应该是传递给脚本的某种参数,那么它必须包含在ajax调用中。Dan,我更新了代码以包含cfc并更新了JS,因为我认为我有一些不需要的东西。Leigh,消息计数是在cfc中设置的,我没有包含代码,因为它工作并且使if语句工作。知道javascript为什么不能识别cfc返回0或1吗?@Adam-消息计数在cfc中设置好了。只是确保它不是应该传递到cfc中的东西。。因为ajax调用并没有做到这一点。暂时不考虑可能的改进,上面的$.ajax调用在Chris提到的情况下对我有效。使用浏览器的javascript工具查看ajax请求和响应发生了什么。谢谢Liegh,我将更新代码并查看发生了什么。