xmlhttp的实际使用

使用XMLHTTP

使用XMLHTTP获取XML文档并生成XMLDOM

MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。

使用XMLHTTP获取XML文档并生成XMLDOM

MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。
创建XMLHTTP对象的语句如下:

var Http = new ActiveXObject("Microsoft.XMLHTTP");

对象创建后调用Open方法对Request对象进行初始化,语法格式为:
 
Http .open (http-method, url, async, userID, password);

Open方法中包含了5个参数,前三个是必要的,后两个是可选的(在服务器需要进行身份验证时提供)。参数的含义如下所示:
 
http-method:  HTTP的通信方式,比如GET或是 POST
url:   接收XML数据的服务器的URL地址。通常在URL中要指明 ASP或CGI程序
async:  一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作
userID:  用户ID,用于服务器身份验证
password: 用户密码,用于服务器身份验证

XMLHTTP对象的Send方法

用Open方法对Request对象进行初始化后,调用Send方法发送请求:

Http .send()

Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。
XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示:
值 说明

0 Response对象已经创建,但XML文档上载过程尚未结束
1 XML文档已经装载完毕
2 XML文档已经装载完毕,正在处理中
3 部分XML文档已经解析
4 文档已经解析完毕,客户端可以接受返回消息

客户机处理响应信息
客户机接收到返回消息后,进行简单的处理,基本上就完成了C/S之间的一个交互周期。客户机接收响应是通过XMLHTTP对象的属性实现的:

responseTxt:将返回消息作为文本字符串;
responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用;
responseStream:将返回消息视为Stream对象

------一个很简单的javascript例子,将获取XML文本生成字XMLDOM对象---------------

var Http = new ActiveXObject("Microsoft.XMLHTTP");
var url='getItemXml.jsp?id=1';//该页从数据库里询数并生成返回规范的xml文本
Http.open("POST",url,false);
Http.send();
var xmldoc=new ActiveXObject("MSXML.DOMDocument");
xmldoc.async=false;
xmldoc.loadXML(Http.responseText);

我想利用xmlhttp实现 以下功能:
客户端通过xmlhttp向servlet或jsp发送请求,并发送一个sql语句,然后由servlet接收并执行该sql语句,并产生一个结果集(resultset),并将该结果集转换成XML ( 一定要是XML的形式 )然后返回给客户端,由客户端的javascript进行解析,将数据显示在网页上。整个过程中,客户端的页面是不刷新的。
我对xmlhttp和xml不熟悉,所以麻烦能给出详细的代码,谢谢!!!!!
如果问题解决了,分不够再加啊

给你个例子,我刚测试通过:
客户端:
<html>
<head>
<script>
function Query()
{
  var xmlDoc, OrderNode, poster, responseRoot;
  xmlDoc=new ActiveXObject("Msxml.DOMDocument");
  xmlDoc.loadXML("<?xml version=/"1.0/"?>"+
                    "<test>"+
                       "<sql>select name from test</sql>"+
                    "</test>");
  poster=new ActiveXObject("Microsoft.XMLHTTP");
  poster.open("POST","http://localhost:8088/XMLHTTPDemo/XMLServlet",false);
  poster.send(xmlDoc);
  if(poster.responseXML!=null)
  {
for(var i=0;i<poster.responseXML.documentElement.childNodes.length;i++)
{
document.writeln(poster.responseXML.documentElement.childNodes(i).text);
}
  }
  else
alert("error!");
}
</script>
</head>
<body>
<input type="Button" value="Test" οnclick="Query();">
</body>
</html>
服务端(servelet)
package tt.com;
import java.io.*;
import java.sql.*;
import javax.xml.parsers.*;

import org.w3c.dom.*;

import javax.servlet.ServletException;
import javax.servlet.http.*;
public class XMLServlet extends HttpServlet
{

@Override
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException
{
try
{
InputStream is=arg0.getInputStream();
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc=builder.parse(is);
Element root=doc.getDocumentElement();
String sql=root.getFirstChild().getTextContent();
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://XIAOHUASZ//XIAOHUASZ;DatabaseName=XHBookShop";
String user="xiaohua";
String password="";
Connection conn=DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
arg1.setContentType("text/xml");
PrintWriter out=arg1.getWriter();
out.println("<?xml version=/"1.0/"?><test>");
while(rs.next())
{
String s1=rs.getString(1);
out.println("<name>"+s1+"</name>");
}
out.println("</test>");
rs.close();
stmt.close();
conn.close();
out.close();
}
catch(Exception e){e.printStackTrace();}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值