WEB开发网
开发学院网页设计JavaScript 用 E4X 和 Prototype 创建 Ajax mindreader 应用程... 阅读

用 E4X 和 Prototype 创建 Ajax mindreader 应用程序,第 2 部分: 使 mindreader 应用程序更智能化

 2010-03-09 00:00:00 来源:WEB开发网   
核心提示: 如果保存这个文件并重新装载页面,就会看到所有功能都与以前一样,用 E4X 和 Prototype 创建 Ajax mindreader 应用程序,第 2 部分: 使 mindreader 应用程序更智能化(10),只有两点不同,首先,可以考虑在服务器而不是浏览器中进行处理;但是本文的意图只是使用

如果保存这个文件并重新装载页面,就会看到所有功能都与以前一样,只有两点不同。首先,如果仍然显示警告框,您会看到现在是由数据库在控制知识库中的数据。第二,如果别人更新了集成的数据库,您也会看到比以前更多的目标。

我们来看看如何输入新数据。

  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 基础结构

上一页  5 6 7 8 9 10 

Tags:EX Prototype 创建

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接