【发布时间】:2018-04-27 12:51:23
【问题描述】:
我找到了一个简单的 JS 脚本,它可以用作聊天机器人。 在脚本本身中,lastUserMessage 的结果是内联预定义的,如
if (lastUserMessage === 'name') {
botMessage = 'My name is ' + botName;
}
我想要实现的是,如果 JS 在数据库中搜索 lastUserMessage 并从那里提供 botMessage。 p>
我相信它应该不会那么难,但我不知道该怎么做。
这里是 JS 代码:
nlp = window.nlp_compromise;
var messages = [], //array that hold the record of each string in chat
lastUserMessage = "", //keeps track of the most recent input string from the user
botMessage = "", //var keeps track of what the chatbot is going to say
botName = 'Bot Name', //name of the chatbot
talking = true; //when false the speach function doesn't work
//edit this function to change what the chatbot says
function chatbotResponse() {
talking = true;
botMessage = "Ops... didn't get this"; //the default message
if (lastUserMessage === 'name') {
botMessage = 'My name is ' + botName;
}
}
//this runs each time enter is pressed.
//It controls the overall input and output
function newEntry() {
//if the message from the user isn't empty then run
if (document.getElementById("chatbox").value != "") {
//pulls the value from the chatbox ands sets it to lastUserMessage
lastUserMessage = document.getElementById("chatbox").value;
//sets the chat box to be clear
document.getElementById("chatbox").value = "";
//adds the value of the chatbox to the array messages
messages.push(lastUserMessage);
//Speech(lastUserMessage); //says what the user typed outloud
//sets the variable botMessage in response to lastUserMessage
chatbotResponse();
//add the chatbot's name and message to the array messages
messages.push("<b>" + botName + ":</b> " + botMessage);
// says the message using the text to speech function written below
Speech(botMessage);
//outputs the last few array elements of messages to html
for (var i = 1; i < 8; i++) {
if (messages[messages.length - i])
document.getElementById("chatlog" + i).innerHTML = messages[messages.length - i];
}
}
}
//runs the keypress() function when a key is pressed
document.onkeypress = keyPress;
//if the key pressed is 'enter' runs the function newEntry()
function keyPress(e) {
var x = e || window.event;
var key = (x.keyCode || x.which);
if (key == 13 || key == 3) {
//runs this function when enter is pressed
newEntry();
}
if (key == 38) {
console.log('hi')
//document.getElementById("chatbox").value = lastUserMessage;
}
}
//clears the placeholder text ion the chatbox
//this function is set to run when the users brings focus to the chatbox, by clicking on it
function placeHolder() {
document.getElementById("chatbox").placeholder = "";
}
这是 HTML 代码
<div id='bodybox'>
<div id='chatborder'>
<p id="chatlog2" class="chatlog"> </p>
<p id="chatlog1" class="chatlog"> </p>
<input type="text" name="chat" id="chatbox" placeholder="Hi there! Type here to talk to me." onfocus="placeHolder()">
</div>
需要做什么?
理想情况下,脚本应采用值“lastUserMessage”和 来自具有 2 列“lastUserMessage”的数据库的“botMessage”和 “botMessage”。
我试图按照下面 Ghost 的评论...但没有用。
nlp = window.nlp_compromise;
var messages = [], //array that hold the record of each string in chat
lastUserMessage = "", //keeps track of the most recent input string from the user
botMessage = "", //var keeps track of what the chatbot is going to say
botName = 'Bot Name', //name of the chatbot
talking = true; //when false the speach function doesn't work
//edit this function to change what the chatbot says
function chatbotResponse() {
talking = true;
botMessage = "Ops... didn't get this"; //the default message
$.ajax({
url: 'db_query.php',
data: "lastUserMessag=lastUserMessag",
dataType: 'json',
success: function(data)
{
var lastUserMessage_db = data[0];
var botMessage_db= data[1];
if (lastUserMessage === lastUserMessage_db) {
botMessage = botMessage_db;
}
}
});
}
//this runs each time enter is pressed.
//It controls the overall input and output
function newEntry() {
//if the message from the user isn't empty then run
if (document.getElementById("chatbox").value != "") {
//pulls the value from the chatbox ands sets it to lastUserMessage
lastUserMessage = document.getElementById("chatbox").value;
//sets the chat box to be clear
document.getElementById("chatbox").value = "";
//adds the value of the chatbox to the array messages
messages.push(lastUserMessage);
//Speech(lastUserMessage); //says what the user typed outloud
//sets the variable botMessage in response to lastUserMessage
chatbotResponse();
//add the chatbot's name and message to the array messages
messages.push("<b>" + botName + ":</b> " + botMessage);
// says the message using the text to speech function written below
Speech(botMessage);
//outputs the last few array elements of messages to html
for (var i = 1; i < 8; i++) {
if (messages[messages.length - i])
document.getElementById("chatlog" + i).innerHTML = messages[messages.length - i];
}
}
}
//runs the keypress() function when a key is pressed
document.onkeypress = keyPress;
//if the key pressed is 'enter' runs the function newEntry()
function keyPress(e) {
var x = e || window.event;
var key = (x.keyCode || x.which);
if (key == 13 || key == 3) {
//runs this function when enter is pressed
newEntry();
}
if (key == 38) {
console.log('hi')
//document.getElementById("chatbox").value = lastUserMessage;
}
}
//clears the placeholder text ion the chatbox
//this function is set to run when the users brings focus to the chatbox, by clicking on it
function placeHolder() {
document.getElementById("chatbox").placeholder = "";
}
在 DB_query.php 我有
$p = $_GET['lastUserMessag'];
$query=mysql_query("SELECT lastUserMessag, botMessage FROM `aiml` WHERE lastUserMessag='$p'");
$array = mysql_fetch_row($query);
echo json_encode($array);
【问题讨论】:
-
这在什么服务器上运行?
-
我想您使用的是客户端 JS,那么服务器端应用程序是什么样的?客户端 JS 向服务器执行 HTTP 请求,服务器通过一些查询查看数据库。我看不到 JS 在哪里直接发出 MySQL 查询。
-
它在 Windows 服务器上。 JS 不发出 MySQL 查询....我相信这是我需要发生的事情。
-
您需要 GET/POST 访问 MySQL 数据库的服务器。否则,您可以使用本地存储,尽管我不确定这是否是您想要的以及是否所有浏览器都支持它。阅读:html5rocks.com/en/tutorials/offline/storage
-
所以您希望 SO 用户为您编写服务器端代码?您是否尝试过搜索并了解如何实现这一目标?
标签: javascript html mysql