ASP.NET 2.0 AJAX에서는 클라이언트 js에서 서버 Webservice를 쉽게 호출할 수 있습니다. 다음은 호출의 몇 가지 예입니다. 작성자가 설치한 ASP.NET 2.0 AJAX 버전은
AJAX November CTP입니다.
세 가지 예는 다음과 같습니다.
매개변수가 있는 1개의 WS 메소드
2 매개변수가 없는 WS 메서드
3 매개변수 유형이 DataTable인 WS 메소드
1. WebMethod
참고할 핵심 사항:
1 WebMethod 클래스는 Microsoft.Web.Script.Services 네임스페이스를 추가해야 하며 이 공간은 Microsoft.Web.Preview.dll을 참조해야 합니다.
유형 2 선언에 [ScriptService] 태그 추가
3 Asp.net 2.0에서는 DataTable을 반환 유형으로 직접 사용할 수 있지만 Web.config 파일에 직렬화 변환기 특성을 추가해야 합니다. DataSet, DataTable 및 DataRow에는 모두
<system.web.extensions>
변환기가 있습니다.
<스크립팅>
<웹서비스>
<json직렬화>
<변환기>
<이름 추가="DataSetConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter, Microsoft.Web.Preview"/>
<이름 추가="DataRowConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter, Microsoft.Web.Preview"/>
<이름 추가="DataTableConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter, Microsoft.Web.Preview"/>
</converters>
</json직렬화>
</webServices>
</스크립팅>
</system.web.extensions>
웹 서비스 1:
시스템을 사용하는 WS1;
System.Web 사용;
System.Collections 사용;
System.Web.Services 사용;
System.Web.Services.Protocols 사용;
Microsoft.Web.Script.Services 사용;
System.Data 사용;
/**//// <요약>
/// WS1에 대한 요약 설명
/// </summary>
[WebService(네임스페이스 = " http://tempuri.org/ ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[스크립트서비스]
public class WS1 : System.Web.Services.WebService {
public WS1 () {
//설계된 구성 요소를 사용하는 경우 다음 줄의 주석 처리를 제거하세요.
//컴포넌트 초기화();
}
[웹메소드]
공개 문자열 ServerTime()
{
return String.Format("현재: {0}", DateTime.Now);
}
[웹메소드]
공개 데이터테이블 GetDataTable()
{
DataTable dt = new DataTable("사람");
dt.Columns.Add(new DataColumn("이름", typeof(string)));
dt.Columns.Add(new DataColumn("LastName", typeof(string)));
dt.Columns.Add(new DataColumn("Email", typeof(string)));
dt.Rows.Add("kui", "he", " [email protected] ");
dt.Rows.Add("ren", "chao", " [email protected] ")
return dt;
}
}
웹 서비스 2:
시스템을 사용하는 WS;
System.Web 사용;
System.Collections 사용;
System.Web.Services 사용;
System.Web.Services.Protocols 사용;
Microsoft.Web.Script.Services 사용
/**//// <summary>
/// WS 요약 설명
/// </summary>
[WebService(네임스페이스 = " http://tempuri.org/ ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[스크립트서비스]
public class WS : System.Web.Services.WebService {
public WS () {
//설계된 구성 요소를 사용하는 경우 다음 줄의 주석 처리를 제거하세요.
//컴포넌트 초기화();
}
[웹메소드]
[ScriptMethod(UseHttpGet = true)]
공개 문자열 HelloWorld(문자열 쿼리)
{
문자열 inputString = Server.HtmlEncode(query);
if (!String.IsNullOrEmpty(inputString))
{
return String.Format("안녕하세요, {0}. ", inputString);
}
또 다른
{
"쿼리 문자열이 null이거나 비어 있습니다"를 반환합니다.
}
}
}
2. 첫 페이지:
참고할 핵심 사항:
사용해야 하는 백그라운드 WebService 메서드는
<asp:ScriptManager ID="ScriptManager1" runat="server">
위치에 설정되어 있습니다.
<서비스>
<asp:ServiceReference Path="~/WS.asmx" />
<asp:ServiceReference Path="~/WS1.asmx" />
</서비스>
</asp:스크립트매니저>
기본 페이지:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1// EN" " http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<head runat="서버">
<title>제목 없는 페이지</title>
<script 언어="javascript" type="text/javascript" src="js.js">
</스크립트>
</head>
<본문>
<form id="form1" runat="서버">
<asp:ScriptManager ID="ScriptManager1" runat="서버">
<서비스>
<asp:ServiceReference Path="~/WS.asmx" />
<asp:ServiceReference Path="~/WS1.asmx" />
</서비스>
</asp:스크립트매니저>
<div>
<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="dd();return false;"
<div ID="시간">
</div>
<div id="목록1">
<asp:DropDownList ID="ddl1" runat="서버" Width="187px">
</asp:드롭다운리스트>
</div>
</div>
</form>
</body>
</html>
3. 자바스크립트 프로그램:
참고할 핵심 사항:
AJAX 11월 CTP는 eval() 메서드를 사용하여 이를 DataTable 개체로 변환하고 앞의 "(")를 잘라야 하는 반면, AJAX 12월 CTP는 "Sys.Preview.Data.DataTable.parseFromJson( 결과) ”
함수 dd()
{
WS.HelloWorld(
'헤쿠이',
함수(결과)
{
경고(결과);
}
);
WS1.서버시간(
함수(결과)
{
경고(결과);
var divTime = document.getElementById("time");
divTime.innerHTML = 결과;
}
);
WS1.GetData테이블(
함수(결과)
{
//드롭다운 상자 컨트롤을 가져옵니다.
var List = document.getElementById("ddl1");
//AJAX 11월 CTP는 eval() 메서드를 사용하여 이를 DataTable 개체로 변환해야 합니다(그리고 선행 "(")를 잘라냅니다.
var Text= result.dataArray.substring(0,result.dataArray.length -1);
var Table = eval(텍스트);
//AJAX 12월 CTP는 다음 변환 방법을 지원합니다.
// var Table = Sys.Preview.Data.DataTable.parseFromJson(result);
//드롭다운 상자의 원래 목록 항목을 지웁니다.
(x=List.options.length-1; x > -1; x--)의 경우
{
목록.제거(0);
}
//얻은 DataTable의 데이터를 드롭다운 상자 목록 항목에 추가합니다.
(x=0; x < Table.length; x++ )
{
//각 행을 가져옵니다.
var 행 = 테이블[x];
//목록 항목 생성
var option = document.createElement("option");
//목록 항목에 텍스트 할당이 표시됩니다.
option.text = 행.이름 + " " + 행.성;
//목록 항목 옵션 값 할당
option.value = Row.Email;
//브라우저 종류를 확인하고 항목을 추가합니다.
if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1)
List.add(옵션);
또 다른
List.add(옵션, null);
}
}
);
}
샘플 코드: http://www.cnblogs.com/heekui/archive/2007/01/10/616332.html