【发布时间】: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 调用对我有用
<cffunction access="remote" ....>(正如克里斯提到的)。使用浏览器的 javascript 工具查看 ajax 请求和响应发生了什么。 -
谢谢 Liegh,我会更新代码,看看发生了什么。
标签: javascript jquery ajax coldfusion