我找到了一个简单的 JS 脚本,可以作为聊天机器人使用。 在脚本本身中,lastUserMessage的结果是内联预定义的,如
if (lastUserMessage === 'name') {
botMessage = 'My name is ' + botName;
}
我想要实现的是 JS 在数据库中搜索 lastUserMessage 并从那里提供 botMessage 。
我确信它应该那么难,但我无法弄清楚该怎么做。
以下是 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>
需要做什么?
理想情况下,脚本应采用值&#34; lastUserMessage &#34;和 &#34;的 botMessage &#34;来自具有2列&#34; lastUserMessage &#34;的数据库和 &#34;的 botMessage &#34;
我试图做的是遵循以下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);
答案 0 :(得分:6)
您正在执行的Javascript当前在浏览器中运行,但未连接到您可以从中获取数据的任何数据库。
为此,您必须向后端服务器发送POST或GET请求(假设您有一个),我认为,这是使用NodeJS用JS编写的。
请注意,您应 从不 授予用户访问权限(例如,将数据库连接到您正在使用的代码,该代码在浏览器中执行)到所述数据库然后他们就可以用它做任何他们想做的事。
如果您想了解NodeJS以及如何处理请求,建议您根据自己的专业水平调查W3Schools上的ExpressJS和this great MySQL + NodeJS tutorial
答案 1 :(得分:4)
Javascript在客户端的浏览器中运行。 MySQL在服务器中运行。因此,需要其他东西来连接它们。
我使用PHP和AJAX作为它们之间的管道。 JS发出一个AJAX调用。 (注意:“A”代表“异步”。)然后JS通过“回调”获得结果。同时,AJAX“调用”的目标是一个PHP程序(或Java或VB或......),它连接到数据库(MySQL)并执行SELECT
并构建JSON以交付给JS。
答案 2 :(得分:1)
您确认db_query.php
有效吗?
尝试使用POSTMAN或Broswer之类的Chrome来点击网址。 localhost/db_query.php
或正确的,看看你是否得到了你期望的结果。
如果你得到了预期的结果,那么你的JavaScript就出了问题。
$ .ajax是异步的,所以它将被调用,javascript执行将继续。
我试着解释一下。您致电chatbotResponse()
,$.ajax
拨打success
来设置数据
var lastUserMessage_db = data[0];
var botMessage_db= data[1];
但$ .ajax是异步的,因此javascript执行将继续,因此这个javascript代码将在调用成功之前运行
//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];
}
所以问题是上述代码会在您从lastUserMessage
db_query.php
之前运行
<强>解决方案强>
简单的解决方案是将ajax更改为同步调用async:false
,这不是最佳做法。
$.ajax({
url: 'db_query.php?lastUserMessage='+lastUserMessage,
type: "GET",
async: false,
success: function(data)
{
var lastUserMessage_db = data[0];
var botMessage_db= data[1];
if (lastUserMessage === lastUserMessage_db) {
botMessage = botMessage_db;
}
}
});
更好的方法是利用成功回调
示例:
$.ajax({
url: 'db_query.php?lastUserMessage='+lastUserMessage,
type: "GET",
success: function(data) {
var lastUserMessage_db = data[0];
var botMessage_db = data[1];
if (lastUserMessage === lastUserMessage_db) {
botMessage = botMessage_db;
}
//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];
}
}
});
答案 3 :(得分:1)
这就是我使用Stamos&#39;帮助强>
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 = "Sorry, Didnt get that"; //the default message
$.ajax({
url: "appi.php?lastUserMessage=" + lastUserMessage,
type: "GET",
async: false,
success: function(data) {
var obj = JSON.parse(data);
if (lastUserMessage === obj.lastUserMessage) {
botMessage = obj.botMessage;
}
}
});
}
//****************************************************************
//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];
}
}
}
//text to Speech
//https://developers.google.com/web/updates/2014/01/Web-apps-that-talk-Introduction-to-the-Speech-Synthesis-API
function Speech(say) {
//if ('speechSynthesis' in window && talking) {
// var utterance = new SpeechSynthesisUtterance(say);
//msg.voice = voices[10]; // Note: some voices don't support altering params
//msg.voiceURI = 'native';
//utterance.volume = 1; // 0 to 1
//utterance.rate = 0.1; // 0.1 to 10
//utterance.pitch = 1; //0 to 2
//utterance.text = 'Hello World';
//utterance.lang = 'en-US';
// speechSynthesis.speak(utterance);
// }
}
//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 = "";
}
&#13;
body {
font: 15px arial, sans-serif;
background-color: #fff;
padding-top: 15px;
padding-bottom: 15px;
}
#bodybox {
margin: auto;
max-width: 550px;
font: 15px arial, sans-serif;
background-color: lightgrey;
border-style: solid;
border-width: 1px;
padding-top: 20px;
padding-bottom: 25px;
padding-right: 25px;
padding-left: 25px;
box-shadow: 5px 5px 5px grey;
border-radius: 15px;
}
#chatborder {
border-style: solid;
background-color: #f6f9f6;
border-width: 3px;
margin-top: 20px;
margin-bottom: 20px;
margin-left: 20px;
margin-right: 20px;
padding-top: 10px;
padding-bottom: 15px;
padding-right: 20px;
padding-left: 15px;
border-radius: 15px;
}
.chatlog {
font: 15px arial, sans-serif;
}
#chatbox {
font: 17px arial, sans-serif;
//height: 22px;
width: 100%;
}
h1 {
margin: auto;
}
pre {
background-color: #f0f0f0;
margin-left: 20px;
}
&#13;
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</script>
<div id='bodybox'>
<h1>Virtual Assistant</h1>
<div id='chatborder' class="form-group">
<p id="chatlog7" class="chatlog"> </p>
<p id="chatlog6" class="chatlog"> </p>
<p id="chatlog5" class="chatlog"> </p>
<p id="chatlog4" class="chatlog"> </p>
<p id="chatlog3" class="chatlog"> </p>
<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()" class="form-control">
</div>
&#13;
在appi.php中我有这段代码
$p = $_GET['lastUserMessage']; //open connection to mysql db $connection = mysqli_connect("localhost","username","password","dbname"); //fetch table rows from mysql db $sql = "select lastUserMessage, botMessage FROM `table_name` WHERE lastUserMessage='$p'"; $result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection)); //create an array $emparray = $array; while($row =mysqli_fetch_assoc($result)) { $emparray = $row; } echo json_encode($emparray); //close the db connection mysqli_close($connection);