javascript 调用webservice的一个例子

来源:互联网 发布:linux phpmyadmin配置 编辑:程序博客网 时间:2024/04/28 16:52

1.web服务类:

主要是检索产品目录及产品名称(ProductService.asmx)

<%@ WebService Class="ProductsService" Language="C#" %>
using System;
using System.Data.SqlClient;
using System.Web.Services;
using System.Collections;

[WebService(Namespace="http://localhost/webservices")]
public class ProductsService:WebService
{
 [WebMethod()]
 public string[] GetCategory()
 { 
  //检测产品目录后返回产品目录名称的数组
  ArrayList arrObj=new ArrayList();
  SqlConnection conn=new SqlConnection("server=server90;uid=sa;pwd=sa;database=northwind");
  SqlCommand comm=new SqlCommand("select categoryname from categories",conn);
  conn.Open();
  SqlDataReader sdr=comm.ExecuteReader();
  while(sdr.Read())
  {
   arrObj.Add(sdr["categoryname"].ToString());
  }
  sdr.Close();
  conn.Close();
  return (string[])arrObj.ToArray(typeof(System.String));
 }
 [WebMethod()]
 public string[] GetProduct(string categoryname)
 {
  //根据产品目录名称检索产品
  ArrayList arrObj=new ArrayList();
  SqlConnection conn=new SqlConnection("server=server90;uid=sa;pwd=sa;database=northwind");
  SqlCommand comm=new SqlCommand("select productname,unitprice from categories A,products B where A.categoryid=B.categoryID and A.categoryname=@categoryname",conn);
  comm.Parameters.Add("@categoryname",categoryname);
  conn.Open();
  SqlDataReader sdr=comm.ExecuteReader();
  while(sdr.Read())
  {
   arrObj.Add(String.Format("{0} - {1}",sdr["productname"],sdr["unitprice"].ToString()));
  }
  sdr.Close();
  conn.Close();
  return (string[])arrObj.ToArray(typeof(System.String));
 }
}

2.客户端(product.html),

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language="javascript" type="text/javascript">
var iCallID=0; //由webservice创建的ID
function Init()
{
 //开始时得到产品目录
    var oService=document.getElementById("server"); //包含webservice.htc的对象
    var url="http://localhost/test/ProductService.asmx?WSDL"
    oService.useService(url,"category"); //指定要使用的webservice,并为webservice起一个友好的名称category
    iCallID=oService.category.callService(category_result,"GetCategory"); //使用回调函数来向服务器发送请示,返回一个调用ID
}
//将服务器返回的结果(数组)添加到产品目录下拉列表中
function category_result(result)
{
 
    if(!result.error)
    {
        var category=new Array();
        category=result.value;
        for(var index=0;index<category.length;index++)
        {
            var option =new Option(category[index]);
            document.getElementById("category").options[document.getElementById("category").options.length]=option;
        }
        form.product.style.display="block";
    }
 else
 {
  alert(result.errorDetail.string);
 }
}
//改变产品目录,将继续调用产品webservice
function changeCategory(newCategory)

 var categoryname=newCategory.options[newCategory.selectedIndex].text;
 var oService=document.getElementById("server");
 var url="http://localhost/test/ProductService.asmx?WSDL"
    oService.useService(url,"category");
    iCallID=oService.category.callService(product_result,"GetProduct",categoryname);
}
//将服务器返回的结果(数组)添加到产品目录下拉列表中
function product_result(result)

  if(!result.error)
    {

     document.getElementById("product").options.length=0;
        var product=new Array();
        product=result.value;
        for(var index=0;index<product.length;index++)
        {
            var option =new Option(product[index]);
            document.getElementById("product").options[document.getElementById("product").options.length]=option;
        }
    }
 else
 {
  alert(result.errorDetail.string);
 }
}
</script>
</HEAD>

<BODY onload="Init()">
<div id="server" style="behavior:url(webservice.htc)" />
<form id="form">
    <select id="category" name="category" onChange="changeCategory(this)">
    </select>
    <select id="product" name="product" style="display:none">
    </select>
</form>
</BODY>
</HTML>

原创粉丝点击