异步调用WebService
使用ASP.net Ajax在客户端javaScript中异步调用服务器端webService.需要
1.为web Service类或需要暴露给客户端的WebService方法添加[ScriptService]
2.在页面中的ScriptManager控件中添加对该Web Service的引用;
3.在客户端使用如下JavaScript语法调用该Web Service:
[NameSpace].[ClassName].[MethodName](param1,param2,...,callbackFunction,FailCallbackFunction)
代码例子:(vs2008)
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services><asp:ServiceReference Path="~/WebService.asmx" /></Services>
<Scripts><asp:ScriptReference Path="~/JScript.js" /></Scripts>
</asp:ScriptManager>
<div id="show">
</div>
</form>
</body>
</html>
js
function pageLoad(sender,args)
{
if(!args._isPartialLoad)
{
// Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequestHandler);
// Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
showGetServiceData();
}
}
// /*--當有觸發事件時候,就有動態的圖片提示用戶等待-------------------------------------------------------------------*/
// function beginRequestHandler(sender,args)
// {
// $get("displayImage").style.display="block";
// }
// function endRequestHandler(sender,args)
// {
// // document.getElementById("displayImage").style.display="none";
// $get("displayImage").style.display="none";
// }
function showGetServiceData()
{
WebService.GetServiceData("id","userName",SucceededCallback,FailedCallback);
}
function SucceededCallback(xmlDoc)
{
var sb = new Sys.StringBuilder();
var x1=xmlDoc.getElementsByTagName("info");
for(var i=0;i<x1.length;i++)
{
var x2=x1[i].getElementsByTagName("D1");
for(var j=0;j<x2.length;j++)
{
var x3=x2[j].getElementsByTagName("D2");
for(var k=0;k<x3.length;k++)
{
//var name=x3[k].childNodes[k].text;
var name=x3[k].childNodes[0].text;
var sex=x3[k].getAttribute("sex");
sb.append("<div>");
sb.append("name:");
sb.append(name);
sb.append("Sex:");
sb.append(sex);
sb.append("</div>");
}
}
}
$get("show").innerHTML=sb.toString();
}
function FailedCallback(error)
{
// Display the error.
var message= error.get_message();
var errstr+="服務錯誤:"+ message+"\n";
alert(errstr);
//$get("displayImage").style.display="none";
}
if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();
webservice
using System;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Web.Script.Services;
using System.Xml;
using System.Text;
/// <summary>
/// Summary description for WebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {
public WebService () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
public string HelloWorld() {
return "Hello World";
}
[WebMethod(Description = "GetServiceData", EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public XmlDocument GetServiceData(string id, string userName)
{
StringBuilder sbx = new StringBuilder();
sbx.Append("<info>");
sbx.Append("<D1>");
sbx.Append("<D2 sex=\"man11\">");
sbx.Append("ike11");
sbx.Append("</D2>");
sbx.Append("<D2 sex=\"man12\">");
sbx.Append("ike12");
sbx.Append("</D2>");
sbx.Append("</D1>");
sbx.Append("<D1>");
sbx.Append("<D2 sex=\"man21\">");
sbx.Append("ike21");
sbx.Append("</D2>");
sbx.Append("<D2 sex=\"man22\">");
sbx.Append("ike22");
sbx.Append("</D2>");
sbx.Append("</D1>");
sbx.Append("</info>");
string strXml = sbx.ToString();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(strXml);
return xmlDoc;
}
}

浙公网安备 33010602011771号