Ajax基础教程(3)- 3.2 发送请求参数

http://tech.ddvip.com   2007年11月21日    社区交流

内容摘要:要想充分发挥Ajax技术的强大功能,这要求你向服务器发送一些上下文数据。假设有一个输入表单,其中包含需要输入邮件地址的部分。根据用户输入的ZIP编码,可以使用Ajax技术预填相应的城市名。当然,要想查找ZIP编码对应的城市,服务器首先需要知道用户输入的ZIP编码。

  3.2.1 请求参数作为XML发送

  与几年前相比,当前浏览器上JavaScript的兼容性有了长足的进步,已经不可同日而语,再加上越来越成熟的JavaScript开发工具和技术,你可以决定把Web浏览器作为开发平台。并不只是依赖于浏览器来看待模型—视图—控制器模式中的视图,还可以用JavaScript实现部分业务模型。可以使用Ajax技术把模型中的变化持久存储到后台服务器。如果模型放在浏览器上,模型的变化可以一齐传递到服务器,从而减少对服务器的远程调用次数,还可能提高性能。

  如果只是使用一个包含名/值对的简单查询串,这可能不够健壮,不足以向服务器传递大量复杂的模型变化。更好的解决方案是将模型的变化作为XML发送到服务器。怎么向服务器发送XML呢?

  可以把XML作为请求体的一部分发送到服务器,这与POST请求中将查询串作为请求体的一部分进行发送异曲同工。服务器可以从请求体读到XML,并加以处理。

  下面的例子展示了对于一个Ajax请求如何向服务器发送XML。图3-5显示了这个页面,其中有一个简单的选择框,用户可以选择宠物的类型。这是一个相当简化的例子,但是由此可以了解如何向服务器发送XML。

Ajax基础教程(3)- 3.2 发送请求参数

  图3-5 选择框中选中的项将作为XML发送到服务器

  代码清单3-9显示了postingXML.html。

  代码清单3-9 postingXML.html

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <title>Sending an XML Request</title>
  <script type="text/javascript">
  var xmlHttp;
  function createXMLHttpRequest() {
  if (window.ActiveXObject) {
  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  else if (window.XMLHttpRequest) {
  xmlHttp = new XMLHttpRequest();
  }
  }
  function createXML() {
  var xml = "<pets>";
  var options = document.getElementById("petTypes").childNodes;
  var option = null;
  for(var i = 0; i < options.length; i++) {
  option = options[i];
  if(option.selected) {
  xml = xml + "<type>" + option.value + "</type>";
  }
  }
  xml = xml + "</pets>";
  return xml;
  }
  function sendPetTypes() {
  createXMLHttpRequest();
  var xml = createXML();
  var url = "PostingXMLExample?timeStamp=" + new Date().getTime();
  xmlHttp.open("POST", url, true);
  xmlHttp.onreadystatechange = handleStateChange;
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
  xmlHttp.send(xml);
  }
  function handleStateChange() {
  if(xmlHttp.readyState == 4) {
  if(xmlHttp.status == 200) {
  parseResults();
  }
  }
  }
  function parseResults() {
  var responseDiv = document.getElementById("serverResponse");
  if(responseDiv.hasChildNodes()) {
  responseDiv.removeChild(responseDiv.childNodes[0]);
  }
  var responseText = document.createTextNode(xmlHttp.responseText);
  responseDiv.appendChild(responseText);
  }
  </script>
  </head>
  <body>
  <h1>Select the types of pets in your home:</h1>
  <form action="#">
  <select id="petTypes" size="6" multiple="true">
  <option value="cats">Cats</option>
  <option value="dogs">Dogs</option>
  <option value="fish">Fish</option>
  <option value="birds">Birds</option>
  <option value="hamsters">Hamsters</option>
  <option value="rabbits">Rabbits</option>
  </select>
  <br/><br/>
  <input type="button" value="Submit Pets" onclick="sendPetTypes();"/>
  </form>
  <h2>Server Response:</h2>
  <div id="serverResponse"></div>
  </body>
  </html>

来源:CSDN    责编:豆豆技术应用

正在加载评论...