用 E4X 和 Prototype 创建 Ajax mindreader 应用程序,第 2 部分: 使 mindreader 应用程序更智能化
2010-03-09 00:00:00 来源:WEB开发网如果保存这个文件并重新装载页面,就会看到所有功能都与以前一样,只有两点不同。首先,如果仍然显示警告框,您会看到现在是由数据库在控制知识库中的数据。第二,如果别人更新了集成的数据库,您也会看到比以前更多的目标。
我们来看看如何输入新数据。
var newAnswer = $F('newAnswer');
var thisQuestionId;
new Ajax.Request("knowledgebase.php",
{method: "get",
parameters: {getkb: 'NO', question: newQuestion},
onSuccess: function(transport){
thisQuestionId = transport.responseText;
finish_adding_new_question(newQuestion, newAnswer, thisQuestionId);
}
})
}
这非常简单。首先获取新问题和答案,然后把它发送给 PHP 文件。注意,在 parameters 中使用了多个以逗号分隔的名称-值对。
现在,等待脚本返回并结束这个函数。当脚本返回时,它会提供新问题的 ID,所以可以转到这个例程的第二部分,见清单 12。
清单 12. 完成新问题的添加过程
function finish_adding_new_question(newQuestion, newAnswer, thisQuestionId){
var newQuestionXML = <question id={thisQuestionId}>
<display>{newQuestion}</display>
<answerOption>Yes</answerOption>
<answerOption>No</answerOption>
</question>;
var oldAnswer = "Yes";
if (newAnswer == "Yes"){
oldAnswer = "No";
}
new Ajax.Request("knowledgebase.php",
{method: "get",
parameters: {addAnswers: 'YES',
old_target_id: currentGuessId,
old_answer: oldAnswer,
target_display: newTarget,
question_id: thisQuestionId,
new_answer: newAnswer},
onSuccess: function(transport){
get_knowledge_base();
}
})
}
与前面一样,创建问题元素并更新原来的答案和新答案。完成之后,可以发出一个新请求。注意,这个请求包含多个参数。它把所有信息发送给 PHP 脚本,脚本获取所有信息并在数据库中添加新目标。
这个例程返回之后,就可以请求知识库并获得最新的信息。
结束语和以后的改进
我们在这里构建的应用程序肯定还算不上人工智能,但是它能够给用户提供娱乐。每当用户心里想着知识库中没有的项玩这个游戏时,应用程序会在数据库中添加该项以及适当的问题和答案。通过使用 Prototype JavaScript 库,在每次玩游戏时应用程序都请求知识库的新拷贝,所以总会获得最新的信息。
当然,这个解决方案也有问题;到编写本文时,知识库的内容还不丰富。如果许多人玩这个游戏并添加许多项,那么下载完整的数据库内容可能不现实,必须设法减少下载时间。
目前,有几种方法。最简单的方法是只发送相关的集合。例如,可以对第一个问题 “animal, vegetable, mineral” 进行硬编码,然后只下载相关的三分之一知识库。最终,如果数据库变得非常大了,可以考虑在服务器而不是浏览器中进行处理;但是本文的意图只是使用 E4X 和 Prototype 开发小型 mindreader 应用程序,在服务器上进行处理超出了本文的范围。
本文示例源代码或素材下载
编缉推荐阅读以下文章
- 用 E4X 和 Prototype 创建 Ajax mindreader 应用程序,第 1 部分: 构建 Twenty Questions 基础结构
更多精彩
赞助商链接