访问 json 输出以更新 jquery 函数时遇到问题

Having problems accessing json output to update jquery function

提问人:Foxlon 提问时间:11/8/2023 最后编辑:haxtbhFoxlon 更新时间:11/8/2023 访问量:80

问:

这有点长。提前谢谢你们。正在构建一个实时聊天应用程序。我被困在如何通知客户座席当前正在键入消息。我有 3 个 ColdFusion 脚本来执行此操作:

客户.cfm(客户聊天界面)

<script src = "jquery-3.6.0.min.js"></script>

<div align="right" id="agent-typing-indicator" style="display: none;">Agent is typing...</div>

<script>
// other codes here

setInterval(function () {
$.get("notify_typing.cfm", function (data) {
    // Update the isTyping status in customer.cfm based on the response
    var isTyping = data.isTyping;
    agentIsTyping(isTyping);
}); }, 5000); // Check every 5 seconds


function agentIsTyping(isTyping) {
if (isTyping) {
    // Show a message or indicator to the customer to indicate that the agent is typing.
    $("#agent-typing-indicator").show();
} else {
    // Hide the typing indicator when the agent stops typing.
    $("#agent-typing-indicator").hide();
}
}
</script>

代理.cfm(代理聊天界面)

<script src="jquery-3.6.0.min.js"></script>

<script> // other codes here

// Detect typing start and stop in the input field
var typingTimer; // Timer identifier
var doneTypingInterval = 1000; // Time in milliseconds, e.g., 1000 ms = 1 second
$("#agent-response").on("keyup", function () {
clearTimeout(typingTimer);
// Start a timer to detect when the agent stops typing
typingTimer = setTimeout(doneTyping, doneTypingInterval);
// Notify the client that the agent is typing
notifyClientOfTyping(true);
});

$("#agent-response").on("keydown", function () {
// Clear the timer, indicating the agent is still typing
clearTimeout(typingTimer);
});

function doneTyping() {
// Agent stopped typing, notify the client
notifyClientOfTyping(false);
}

function notifyClientOfTyping(isTyping) {
$.post("notify_typing.cfm", { isTyping: isTyping }, function (data) {
    // Handle the response if needed
    console.log(data);
});
}
</script>

notify_typing.cfm

(通过 AJAX POST 从 Agent.cfm 接收代理键入状态,并通过 AJAX GET 将相同的代理键入状态提供给 Customer.cfm)

<cfparam name="form.isTyping" default="">
<cfif structKeyExists(form, "isTyping")>
<cfset isTyping = form.isTyping>
<cfcontent type="application/json">
 <cfoutput>{"isTyping": #serializeJSON(isTyping)#}</cfoutput>  
</cfif>

我使用 [ console.log(data); ] 来确认 agent.cfm 正在向notify_typing.cfm发送正确的 json 值,{isTyping: 'true'} 或 {isTyping: 'false'}。

问题是,当 customer.cfm 进行 json 调用时,我从notify_typing.cfm收到空的 json 值 ( {isTyping: ''} )( 我使用 console.log(data); 在 customer.cfm 中确认这一点)。因此,我无法隐藏或显示“代理正在键入...”在客户.cfm中。请帮忙。

我已经尝试了 5 天多来解决这个问题,没有任何进展。

jQuery JSON ColdFusion Lucee

评论

0赞 haxtbh 11/8/2023
它将是空的,因为您引用的 cfm 形式范围中的 var 是空的。CFdump 表单范围以查看传递了哪些数据。然后使用这个 var.不过,可能会考虑 websockets,因为您将在这样的实现中挣扎。
0赞 Adrian J. Moreno 11/9/2023
您应该使用 websocket 进行实时聊天,包括“正在打字”功能。ajax 方法要困难得多。您需要一个 Node 服务器来处理聊天并使用从 CF 应用程序发送的身份验证 cookie 对连接进行身份验证。并且不要使用,您需要更灵活的东西。NodeJS 代码示例:dev.to/devland/...cfwebsocket

答: 暂无答案