如何使用Ajax技术开发Web应用程序(2)

13、使用Ajax构建Web应用程序 本文详细介绍了如何使用Ajax技术构建Web应用程序,重点演示了动态表单验证的实现过程。内容涵盖Ajax的核心技术(如JavaScript、XMLHttpRequest和DOM)、XMLHttpRequest对象的使用方法,以及如何配置JBoss应用服务器与MySQL数据库。同时,还讲解了浏览器端与服务器端的交互逻辑,并通过具体的代码示例和流程图帮助开发者理解整个开发流程。文章最后还总结了常见问题及解决方案,并展望了Ajax技术的未来发展。 阅读详情
如何使用Ajax技术开发Web应用程序(2) 
 
出处:blueidea[ 2006-02-09 11:06:30 ]  作者:Sheneyan 译  责任编辑:xietaoming 

 

  作者: Jonathan Fenocchi
  时间:2005.10.26
  译者:Sheneyan
  英文原文:
http://www.webreference.com/programming/javascript/jf/column13/

  在上一篇文章中,我们讨论了如何通过javascript从一个远程XML文件中取得数据。在这篇文章中,我们将学会怎样对数据作更复杂的处理。作为一个示例,我们会准备一组XML数据,将数据分割成独立的片断并以不同的方式展示这些片断(取决于它们是如何被标识的)。

  这篇文章是建立在上一篇文章中构造的示例代码的基础之上,所以如果你不能理解我们现在的代码,你可以回过头去读第一篇文章(sheneyan注:就在上面)。

开始~

  让我们开始我们的第一步:构造XML。我们准备写一个XML文档,它组织了一系列准备让javascript处理的数据,所以我们将一起组织一些节点和子节点(或者,元素和子元素)。在这个例子里,我们将使用一些家庭宠物的名字:

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <pets>
   <pet>猫</pet>
   <pet>狗</pet>
   <pet>鱼</pet>
  </pets>
</data> 
  在上面,我们有这个XML声明(标明这个文档是一个XML 1.0 文档,使用UTF-8编码),一个根元素(<data>)将下面所有的元素组合在一起,一个<pets>元素组织了所有的宠物,然后一个<pet>节点对应一只宠物。为了指定每一只宠物是什么类型的动物,我们在<pet>元素中设置了文本节点:猫,狗,鱼。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html lang="zh" dir="ltr">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>使用Ajax开发Web应用程序 - 示例</title>
    <script type="text/javascript"><!--
    function ajaxRead(file){
      var xmlObj = null;
      if(window.XMLHttpRequest){
          xmlObj = new XMLHttpRequest();
      } else if(window.ActiveXObject){
          xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
      } else {
          return;
      }
      xmlObj.onreadystatechange = function(){
        if(xmlObj.readyState == 4){
          processXML(xmlObj.responseXML);
        }
      }
      xmlObj.open ('GET', file, true);
      xmlObj.send ('');
    }
    function processXML(obj){
      var dataArray = obj.getElementsByTagName('pet');
      var dataArrayLen = dataArray.length;
      var insertData = '<table style="width:150px; border: solid 1px #000"><tr><th>'
        + 'Pets</th></tr>';
      for (var i=0; i<dataArrayLen; i++){
          insertData += '<tr><td>' + dataArray[i].firstChild.data + '</td></tr>';
      }
      insertData += '</table>';
      document.getElementById ('dataArea').innerHTML = insertData;
    }
    //--></script>
  </head>
  <body>
    <h1>使用Ajax开发web应用程序</h1>
    <p>这个页面演示了AJAX技术如何通过动态读取一个远程文件来更新一个网页的内容--不需要任何网页的重新加载。注意:这个例子对于禁止js的用户来说没有效果。</p>
    <p>这个页面将演示如从取回并处理成组的XML数据。被取回的数据将会以表格形式输出到底下。
<a href="#" onclick="ajaxRead('data_2.xml'); return false">查看演示</a>.</p>
    <div id="dataArea"></div>
  </body>
</html> 

(Sheneyan注:完整代码示例见 example_2.html ,XML文件见:data_2.xml)

你会注意到我们和上次一样以同样的方式(通过一个超链接)调用了这个函数,而且我们将数据放入一个DIV(这次这个东东叫做“dataArea”)。这个ajaxRead()函数和上次很接近,除了一点不同:onreadystatechange函数。让我们先看一下这个函数:

xmlObj.onreadystatechange = function(){
      if(xmlObj.readyState == 4){
          processXML(xmlObj.responseXML);
     }
}
  我们取消了updateObj函数并用一个叫做processXML()的新函数来代替它。这个函数将得到XML文档本身(也就是被ajaxRead函数取回的)并处理它。(这“XML文档本身”我指的是参数“xmlObj.responseXML”)

  现在让我们分析一下这个函数processXML。下面是它的代码:

      function processXML(obj){
      var dataArray = obj.getElementsByTagName('pet');
      var dataArrayLen = dataArray.length;
      var insertData = '<table style="width:150px; border: solid 1px #000"><tr><th>'
      + 'Pets</th></tr>';
      for (var i=0; i<dataArrayLen; i++){
          insertData += '<tr><td>' + dataArray[i].firstChild.data + '</td></tr>';
     }
     insertData += '</table>';
     document.getElementById ('dataArea').innerHTML = insertData;
   }  

  首先,我们定义了一些变量。“dataArray”作为所有<pet>节点的数组(不是节点数据,只是节点)。“dataArrayLen”是这个数组的长度,用于我们的循环。“insertData”则是一个表格的开头的HTML。

  我们的第二步则是遍历所有的<pet>元素(通过变量“dataArray”)并将数据添加到变量insertData中。这里我们会创建一个表格行,插入一个表格数据节点(td)进去,再将每一个<pet>元素的文本包含进这个表格数据节点,并将这些都添加进变量“insertData”。因此,每循环一次,变量insertData将添加一行包含三个宠物中之一名称的新数据。

  新数据行添加完后,我们插入一个“</table>”结束标签到变量“insertData”。这完成了这个表格,然后我只剩这最后一步来达成我们的目标:我们需要将这个表格放到页面上。幸运的是,我们得感谢innerHTML属性,这很简单。我们通过函数document.getElementById()取得DIV“dataArea”并将变量“insertData”中的HTML插进去。嗯,这个表格冒出来了!

  我们继续之前……

  我得指出两点:

  首先,你会注意到我们并没有使用节点<pets>。这事因为我们只有一个数据组(<pets>)以及后来所有的元素(每一个<pet>元素);这些子节点包含了不同的数据但它们有相同的名字。在这个例子中,这个节点能够被忽略。然而,将所有的元素<pet>放进<pets>元素还是比较好,而不是让这些<pet>元素自己散放(但仍然在data元素里面)。

  另外一种方式是给每一个宠物放一个指定的标签,比如:

 <?xml version="1.0" encoding="UTF-8"?>
<data>
  <pets>
    <猫 />
    <狗 />
    <鱼 />
  </pets>
</data>  

  然后我们能够遍历元素<pets>里的节点。这个processXML函数看起来就像这样:

    function processXML(obj){
      var dataArray = obj.getElementsByTagName('pets')[0].childNodes;
      var dataArrayLen = dataArray.length;
      var insertData = '<table style="width:150px; border: solid 1px #000"><tr><th>'
     + 'Pets</th></tr>';
    for (var i=0; i<dataArrayLen; i++){
       if(dataArray[i].tagName){
          insertData += '<tr><td>' + dataArray[i].tagName + '</td></tr>';
       }
    }
    insertData += '</table>';
    document.getElementById ('dataArea').innerHTML = insertData;
  } 

(Sheneyan注:修改后的示例见:example_2_1.html ,XML文件见:data_2_1.xml)

这里所作的修改就是我们指向了<pets>组元素(这个“[0]”意味这是第一个,即使它就是唯一的那一个)以及它的子节点(元素<猫 />,<狗 />,<鱼 />)。因为文本元素分割了这几个元素(空格被认为是一个节点),我们需要确定只有那些有标签名的节点(嗯,也就是只有标签)通过。然后我们输出每一个标签的名字。因为每一个标签名是一个宠物,我们不需要取得每一个节点的数据-节点名本身已经足够。去看一下它是怎么工作的吧。

  还有另外一种方式来完成我们上面的工作,就是给每一个<pet>节点设置一个属性值。你的XML文档看起来就像这样:

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <pets>
    <pet type="猫" />
    <pet type="狗" />
    <pet type="鱼" />
  </pets>
</data>  
  你只需要稍微修改一下你的processXML函数,它变成这样子了:

    function processXML(obj){
      var dataArray = obj.getElementsByTagName('pet');
      var dataArrayLen = dataArray.length;
      var insertData = '<table style="width:150px; border: solid 1px #000"><tr><th>'
      + 'Pets</th></tr>';
    for (var i=0; i<dataArrayLen; i++){
          insertData += '<tr><td>' + dataArray[i].getAttribute('type') + '</td></tr>';
      }
      insertData += '</table>';
      document.getElementById ('dataArea').innerHTML = insertData;
   } 

(Sheneyan注:修改后的示例见:example_2_2.html  ,XML文件见:data_2_2.xml)

  关键的不同在于我们通过dataArray[i].getAttribute('type')取得值,它返回了当前<pet>节点的“type”属性的值。

继续...

  现在我们已经知道了一些从一个单独的XML数据组中取回数据的有效方法,让我们看看如何从多个组中取回数据。和只是列出一个pets所拥有的内容不同,我们假设我们有一个针对我们宠物的日课表。因为它们都有不同的需要,每一只宠物都得仔细的照顾。面对这种情况,动物的看管员需要一个每日依据。现在来让我们将这些放入一个良好格式的XML:

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <pets>
    <pet>Cat
      <task>Feed</task>
      <task>Water</task>
      <task>Comb out fleas</task>
    </pet>
    <pet>Dog
      <task>Feed</task>
      <task>Water</task>
      <task>Put outside</task>
    </pet>
    <pet>Fish
      <task>Feed</task>
      <task>Check oxygen, water purity, etc.</task>
    </pet>
  </pets>
</data> 
  也许这个看起来很奇怪,但这就是我们正在创建的子组(sub-group)。每一个<pet>元素都是一个组<pets>的子组,而每一个<task>则是每一个<pet>组的子元素。

  在我继续之前,你也许希望将你的表格用一些css美化一下,比如:

  <style type="text/css"><!--
  table, tr, th, td {
    border: solid 1px #000;
    border-collapse: collapse;
    padding: 5px;
 }
--></style> 
  这让这个表格更容易读取。现在让我们去研究函数processXML:

  function processXML(obj){
    var dataArray = obj.getElementsByTagName('pet');
    var dataArrayLen = dataArray.length;
    var subAry, subAryLen;
    var insertData = '<table><tr><th>'
      + 'Pets</th><th>Tasks</th></tr>';
    for (var i=0; i<dataArrayLen; i++){
          insertData += '<tr><td>' + dataArray[i].firstChild.data + '</td>';
          subAry = dataArray[i].getElementsByTagName('task');
          subAryLen = subAry.length;
          insertData += '<td>';
            for(var j=0; j<subAryLen; j++){
              insertData += subAry[j].firstChild.data;
              if( subAryLen != j+1 ) { insertData += ', '; }
            }
        insertData += '</td></tr>';
  }
  insertData += '</table>';
  document.getElementById ('dataArea').innerHTML = insertData;
} 

  (Sheneyan注:修改后的示例见:example_2_3.html ,XML文件见:data_2_3.xml)

  新增加的内容,首先是两个新变量的声明:“subAry”和“subAryLen”。它们和之前的变量“dataArray”和“dataArrayLen”类似,除了它们指向不同的数组(特别是它们将指向那些“task”元素-当“dataArray”和“dataArrayLen”指向“pet”元素的时候)。

  我们也改变了变量“insertData”的初始值-我们增加了一个表格头(<th>)给我们的“tasks”字段。

  下一步改变在于循环:我们把值赋给subAry和subAryLen变量。变量subAry成为当前<pet>的<task>元素的数组。变量subAryLen成为这个数组的长度,直到这个数组发生变化(当外部循环走到下一个<pet>时)。

  我们创建了一个内嵌的循环来处理所有的<task>元素,一次一个。大概来说,我们创建一个新的数据格,放进一个用逗号分隔的任务列表,然后关闭数据表格以及当前行。尤其,这些<task>元素节点数据(任务本身,比如,“喂食”)放置入变量“insertData”里的数据格。

  接下来,我们检验当前<pet>是否有其它更多的task。如果还有,我们增加一个逗号(,)到变量insertData来让每一个任务使用一个逗号分隔(“a, b, c”,而不是“a, b, c,”-注意,最后一个逗号在第二个任务那里,所以我们不需要)。这个工作在我们取得subAry数组长度的时候(给循环的“j”变量加1)就完成了。因为这个循环会在下一个循环的时候把变量“j”递增1,“j”会比它这次检验时还多1。因此,如果“j+1”(或者,“当循环再次开始的时候j的值”)等于subAryLen(当前<pet>节点的<task>节点数目),这个循环将停止。如果循环不再运行,我们就不再添加新的逗号来分隔任务。所以如果“j+1”不等于subAryLen,我们直到我们可以安全的加入逗号到“insertData”,为下一个<task>作准备。

  一旦内循环结束,我们关闭task数据格以及pet行。外部循环会重新开始创建一个新行以及移动到下一个<pet>。这个处理一直进行到所有的<pet>元素(以及每一个pet的所有<task>元素)都被处理完。

  有其他方法吗?

  你也许会想:“那javascript变得相当复杂了,但它只会随着XML越来越复杂而跟着变复杂,也许我们能够简化XML,然后,简化javascript”。如果你这么想,很棒,因为你完全正确。我之前展示的不同方法之一,我详细说明的那个也许能够成为最合适的。我们怎么使用属性来对应每一只宠物以及相应任务?XML看起来会变成怎样?

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <pets>
    <pet type="Cat" tasks="Feed, Water, Comb out fleas" />
    <pet type="Dog" tasks="Feed, Water, Put outside" />
    <pet type="Fish" tasks="Feed, Check oxygen, water purity, etc." />
  </pets>
</data>  

  哇哦!看起来简单多了。让我们看看我们的processXML函数如何修改:

  function processXML(obj){
    var dataArray = obj.getElementsByTagName('pet');
    var dataArrayLen = dataArray.length;
    var insertData = '<table><tr><th>'
     + 'Pets</th><th>Tasks</th></tr>';
    for (var i=0; i<dataArrayLen; i++){
        insertData += '<tr><td>' + dataArray[i].getAttribute('type')             + '</td>'
+ '<td>' + dataArray[i].getAttribute('tasks') + '</td></tr>';
    }
    insertData += '</table>';
    document.getElementById ('dataArea').innerHTML = insertData;
}

(Sheneyan注:修改后的示例见:example_2_4.html,XML文件见:data_2_4.xml)

  就像你猜的一样,函数简单多了。因为代码变得简单,它也会变得更有效率。和我们比较老的函数的唯一的不同在于这个变量insertData现在插入更多的HTML,尤其是两个新变量“type”和“tasks”。就如我们较早之前所学的,那些属性是我们从XML文档的<pet>元素中取得的,而且每个pet的属性都有不同的值。对于你自己修改这个XML文件以适应你的进度的变动来说也许是最简单的方法。例如,如果你最终把你的猫身上的跳蚤抓光了,你只要简单从你的猫的每日任务表中把“减少跳蚤数量”删除,然而在之前我们使用的XML中,实现起来也许会觉得糊里糊涂。

  最后的XML格式化的方法是将两部分混合。现在,我们将使用属性和不同的标签。让我们看一下示例XML:

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <pets>
    <猫 tasks="喂食, 饮水, 减少跳蚤数量" />
    <狗 tasks="喂食, 饮水, 带出去遛遛" />
    <鱼 tasks="喂食, 检查氧气,水的纯度,其它" />
  </pets>
</data>  

  这也许是最便于理解的XML。让我们分析一下我们为了让processXML函数运作起来所作的变更:

function processXML(obj){
    var dataArray = obj.getElementsByTagName('pets')[0].childNodes;
    var dataArrayLen = dataArray.length;
    var insertData = '<table><tr><th>'
     + 'Pets</th><th>Tasks</th></tr>';
    for (var i=0; i<dataArrayLen; i++){
      if(dataArray[i].tagName){
        insertData += '<tr><td>' + dataArray[i].tagName + '</td>'
            + '<td>' + dataArray[i].getAttribute('tasks') + '</td></tr>';
      }
  }
  insertData += '</table>';
  document.getElementById ('dataArea').innerHTML = insertData;
} 

   (Sheneyan注:修改后的示例见:example_2_5.html,XML文件见:data_2_5.xml)

  “dataArray”现在指向了<pets>的子节点,将它们作为一个数组对待(换句话说,dataArray现在是在<pets>节点内所有节点的数组)。这事因为每一个标签都不同(<猫 />,<狗 />,<鱼 />),所以我们不能使用这些元素的名称来搜索它们(而之前我们可以使用<pet>,因为所有的元素都是<pet>)。

  还是一样,每个节点之间的有空格,所以在我们的处理过程中得排除掉文本节点。我们能够检验标签名是否存在-文本节点是节点但没有标签,而<猫 />,<狗 />,<鱼 />节点都是标签。所以如果一个标签有名字,那我们能够将数据插入变量insertData。我们插入的数据是一个表格并有两个表格数据格。这第一个单元格是标签名,也就是宠物的类型(猫,狗或鱼),而第二个单元格则是指定动物的“tasks”属性值(比如“喂食或饮水”)。

  结束语

  在这篇文章里,我演示了这个例子的很多变化,你可以随意试验它们来检验哪个更适合你。只要记住一点,XML是“可扩展的”,所以没有“错误的”方法来组合你的数据,虽然经常有一个“最好的”方法。而且,要注意让你的XML保持格式良好。记住很多问题来自于忘记结束一个标签(比如<狗 />而不是<狗>;除非这个节点中有数据,比如下面的<狗>这里有数据哦</狗>)。

  我意图使XML和javascript的应用不糊涂而变得明朗。一步步的学习处理更多的数据,你能够将ajax运用于更大的用途。我希望看到ajax更多的应用于企业网站,及其它。所以如果你将这些知识应用于实践,我很高兴了解到你学到了什么(mail:jona#slightlyremarkable.com #换成@)。


  关于作者

  Jonathan Fenocchi(mail:jona#slightlyremarkable.com #换成@)是一个网络开发者,主攻web设计,客户端脚本,php脚本。
  他的网站位于http://www.slightlyremarkable.com

 

 


海洋浮游生物识海洋浮游生物识别系统:基于YOLOv10的显微图像自动检测与UI别系统:基于海洋浮游生物识别系统:基于YOLOv10的显微图像自动检测与UI展示YOLOv10的显微图像自动检测与UI展示 本文介绍了如何利用YOLOv10模型进行海洋浮游生物的自动识别,旨在提高传统显微镜观测的效率与准确性。研究背景强调了浮游生物在海洋生态系统中的重要性,并指出传统方法的局限性。数据集选用WHOI-Plankton,包含70多种浮游生物的20000多张带标签图像。文章详细描述了YOLOv10模型的安装、数据集配置、训练与测试步骤,并提供了基于PyQt5的图形化检测界面代码。结果显示,模型在精度、召回率和mAP@0.5等指标上表现优异,推理速度达到约30 FPS。最后,文章提出了部署建议和未来优化方向,如集成摄像 阅读详情

相关推荐

晶振(晶体振荡器)测试方法详解

晶振测试方法分为无源和有源两种类型。无源晶振(两脚)需用示波器测试波形,重点关注正弦波形状、200mV-1.5Vpp幅值和频率精度;有源晶振(四脚)通电后直接输出方波。测试要点包括:示波器使用10X探头、AC耦合,带宽需5倍于晶振频率;万用表可初筛短路/开路;替换法是工程最有效方法。常见故障排查顺序:供电→复位→焊接→型号→负载电容→波形观察→更换晶振→MCU配置。负载电容需按公式计算匹配,示波器观察是核心测试手段。

jiujiujinyuxi的博客 923

使用AJAX技术构建更优秀的Web应用程序

  一、 简介  异步JavaScript+XML(即Ajax),是一种创建交互式web应用程序的Web开发技术。这种程序使用JavaScript和XML从客户端提交服务器请求,且整个过程中仅需要交换少量的数据而不必提交整个web页面。因此,这样的程序将更快和更具响应性,并将成为新一代客户机-服务器系统的重要基础技术之一。你可以在站点http://www.goole.com/webhp?compl

金子的专栏 920

【数据结构】汉诺塔问题(丰富图解)

经典汉诺塔问题,丰富图解,助你理解。

℉f的博客 4105

ajax技术怎么应用程序,如何使用Ajax技术开发Web应用程序(2)

在上一篇文章中,我们讨论了如何通过javascript从一个远程XML文件中取得数据。在这篇文章中,我们将学会怎样对数据作更复杂的处理。作为一个示例,我们会准备一组XML数据,将数据分割成独立的片断并以不同的方式展示这些片断(取决于它们是如何被标识的)。这篇文章是建立在上一篇文章中构造的示例代码的基础之上,所以如果你不能理解我们现在的代码,你可以回过头去读第一篇文章(sheneyan注:就在上面)...

weixin_32461163的博客 176

Python实战:如何用高德API批量获取POI数据(附完整代码)

本文详细介绍了如何使用Python通过高德API批量获取POI数据,包括API基础准备、核心功能模块设计、高级功能实现及实战应用案例。文章提供了完整代码示例,帮助开发者高效解决商业网点分析、公共设施规划等实际项目中的数据采集需求。

stem5的博客 321

【Tessy】集成测试小白入门指导

本文详细介绍了如何进行集成测试的小白入门指导,从新建工程到设计用例,实现集成测试的过程详细步骤

qq_37282365的博客 1184

使用AJAX技术开发新一代Web应用程序 2

  三、网络的潜力  互联网时代的伟大就在于世界各地所有的计算机互相联系,就象在一个非常大的计算资源之中。远程和本地过程调用变得很难区分,并且发行者已经不再清醒地了解它们在哪些物理机器上工作。   不幸的是,远程和本地过程调用是根本不相同的技术。  在网络上的通讯是昂贵的(它们是慢并且不可靠的)。当一部分非网络代码被编译或解释时,各种方法和函数就象在其上操作的数据一样被编码为存储在相同的本地内存中...

weixin_34153893的博客 94

微信小程序 - 最新详细实现“全局实时监听页面发生跳转“ 当页面跳转后立即捕捉并触发某个操作或调用处理函数,小程序整个项目无时无刻只要路由发生变化改变了就能监听,时刻检测页面URL变化(获取路由数据)

微信小程序,vue2,vue3,监听路由,如何监听路由发生变化,如何watch监听路由,怎么全局监听页面发生变化,实现当页面路由发生变化时执行一个函数,当路由变化时执行一些操作执行一段代码,怎么监听路由变化时触发一个函数,监听页面变化,页面间的跳转如何监听,页面跳转时怎么拿到路由及参数,页面路由变化时拿到参数和url,使用watch监听路由变化,页面跳转后怎么触发事件,怎么监听页面跳转,监听页面跳转并拿到路由url路径,小程序怎么全局定义一个专门监听路由的函数,小程序怎么无时无刻实时监听路由页面跳转,监听当

🏆 前端领域优质创作者 4474

基于ASP.NET AJAX低级动画技术开发Web 2.0应用程序

一、 简介     在探讨微软ASP.NET Ajax框架的过程中,我总结出这个框架在网页动画方面的支持可分为以下两种类型:第一部分是依托于Futures CTP部分的跨浏览器兼容的低级动画技术;第二部分是依赖于ASP.NET 2.0服务器端技术的ASP.NET AJAX Control Toolkit部分。很明显,这两种方案各存利弊。在本文中,我将专注于向读者介绍第一种方案,即“跨浏览器兼容的低...

weixin_34401479的博客 151

Open3D 计算点云法向量的夹角【2026最新版】

计算法向量的夹角,博客长期更新,本文最新更新时间为:2026年3月7日。

点云侠的博客 3130

Autosar进阶专栏索引

Autosar进阶专栏索引

赞的博客 3538

ESP32-P4 USB Host 实战:HID 鼠标枚举与报告解析

USB HID 协议是嵌入式系统中连接人机交互设备的基础标准,通过中断端点周期性上报按键与位移数据。其核心在于报告描述符的解析,将原始字节映射为 X/Y 位移、滚轮和按键状态。在 ESP32-P4 上,片内 USB 2.0 High-Speed PHY 与 ESP-IDF 的 usb_host 库及 HID 类驱动协同工作,可稳定完成设备枚举与数据上报。该方案适用于需要外接鼠标、键盘等 HID 设备的嵌入式交互场景,如工业控制面板、智能终端。本文围绕 USB Host 鼠标的完整链路,从协议栈分层、描述符解

weixin_34414650的博客 320

Python二级考试题目及答案解析(含刷题软件)

答案:A 解析:print()函数可以在屏幕上输出指定的字符串或变量,input()函数用于从键盘获取用户输入,int()函数可以将指定的字符串或浮点数转换为整数,float()函数可以将指定的字符串或整数转换为浮点数。答案:A 解析:int()函数可以将字符串转换为整数,float()函数可以将字符串转换为浮点数,str()函数可以将任意类型的变量转换为字符串,bool()函数可以将任意类型的变量转换为布尔值。

YOLO 1万+

使用AJAX技术开发新一代Web应用程序 [转]

  一、引言  一个理想的用户接口对用户最好是不可见的-仅在用户需要时提供选择,否则并不干涉他们的工作而让其专注于手头的工作。然而,这并不是一件容易的事情。如今,我们变得习惯于通过并不十分令人满意的UI进行日常工作,直到有人向我们展示一种更好的方法。现在,我们才逐渐认识到我们当前的方法在做这些事情时是多么吃力。  由于用于显示文档内容的基本web浏览器技术又被推进一步进而超出以前它们所能...

dengxiajuan5846的博客 215

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ajax编程开发,如何使用Ajax技术开发Web应用程序

在上一篇文章中,我们讨论了如何通过javascript从一个远程XML文件中取得数据。在这篇文章中,我们将学会怎样对数据作更复杂的处理。作为一个示例,我们会预备一组XML数据,将数据分割成独立的片断并以不同的方式展示这些片断(取决于它们是如何被标识的)。这篇文章是建立在上一篇文章中构造的示例代码的基础之上,所以假如你不能理解我们现在的代码,你可以回过头去读第一篇文章(sheneyan注:就在上面)...

weixin_33711871的博客 752

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ajax技术怎么应用程序,如何使用Ajax技术开发Web应用程序(1)

在过去,由于为了获得新数据而不得不重新加载web页面(或者加载其他页面)导致web应用程序发展被限制。虽然有其他方法可用(不加载其他页面),但是这些技术都没有被很好地支持而且有bug成灾的趋向。在过去的几个月里,一个过去并不被广泛支持的技术已经被越来越多的web冲浪者(web surfers??是指浏览器还是浏览者?)所接受,它给了开发者更多的自由开发先进的web应用程序。这些通过javascri...

weixin_39859128的博客 260

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

如何使用Ajax技术开发Web应用程序(1)

如何使用Ajax技术开发Web应用程序(1)如何使用Ajax技术开发Web应用程序(1)  出处:blueidea[ 2006-02-08 14:15:25 ]  作者:Sheneyan 译  责任编辑:xietaoming    作者: Jonathan Fenocchi  时间:2005.10.25  译者:Sheneyan  英文原文:http://webreferenc

Vanlin的BLOG 1541

如何使用Ajax技术开发Web应用程序(3)

如何使用Ajax技术开发Web应用程序(3)  出处:blueidea[ 2006-02-10 09:56:11 ]  作者:Sheneyan 译  责任编辑:xietaoming    作者: Jonathan Fenocchi  时间:2005.10.25  译者:Sheneyan  英文原文:http://www.webreference.com/programming/javasc

Vanlin的BLOG 1309

ajax技术怎么应用程序,利用AJAX技术开发应用程序.pdf

维普资讯2008年6月 电 脑 学 习 第3期利用AJAX技术开发应用程序蔡燕敏’摘 要:介绍了AJAx技术的概念、工作原理及使用AJAX技术的基本原则.讨论了AJAx技术在应用程序的开发过程 中的具体操作步骤 。关键词: AJAX Web XMLHttpRequest中图分类号 : TP3...

weixin_36193839的博客 325

ajax开发web 组态_使用Ajax技术构建Web演示应用程序,第1部分,开发Web UI

存档日期:2019年5月16日 | 首次发布:2009年7月28日 Google文档如何将如此惊人的功能集成到Web应用程序中? 他们利用Web 2.0技术,该技术以相对简单的代码提供强大的功能。 在本文中,学习如何使用异步JavaScript和XML(Ajax)技术构建Web应用程序以创建幻灯片演示文稿。 此内容不再被更新或维护。 全文以PDF格式“按原样”提供。 随着技术的飞速发展...

cuyi7076的博客 183

通过 Rails 在 Web 应用程序中使用 Ajax

 Ruby on Rails 为构建 Web 应用程序提供了一个很好的平台。了解如何使用这种平台内置的 Asynchronous JavaScript™ + XML (Ajax) 特性为应用程序提供丰富的 Web 2.0 用户界面体验。 如果没有听说过 Rails,那么欢迎您外星旅行归来,近几年大概只有那个地方没有听说过 Ruby on Rails 了。Rails 最吸引人的地方是能够很快地建立功

IBM技术期刊 788

使用异步Servlet扩展AJAX应用程序

作为Web应用程序模型的AJAX的出现使服务器端的面貌发生了巨大的变化。用户对着Web页面填写表单并单击提交按钮转到下一个链接的典型Web使用模式现在正在转变为更先进的客户端JavaScript以及功能更丰富的用户界面,只要对表单进行操作,比如单击一个复选框、按下一个键或将鼠标移到一个选项卡上,该用户界面就会不断地与服务器交互。考虑一下从客户端传输到服务器的数据量有多大。从可用性的角度来看,用

baggio785的专栏 2128

怎样使用AJAX进行WEB应用程序开发

 AJAX,一个异步JavaScript和XML的缩略词,是当今快速发展的Web开发界十分热门的技术。在这项新技术提供巨大能力的同时,它也燃发了在"Back"按钮问题上的不容置疑的争论。本文作者将向你解释怎样在真实世界中使用AJAX以及怎样在一个工程中评估它的价值。在你读完本文后,你就会明白什么是AJAX,在什么情况下,为什么以及怎样使用这项技术。   一、 简介   A...

agol83082486的博客 108
上一篇: 如何使用Ajax技术开发Web应用程序(1)
下一篇: 如何使用Ajax技术开发Web应用程序(3)
paste
博客等级 码龄21年 28粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值