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