一起谈.NET技术,JavaScript 调用 ASP.NET WebService 的简单方法

简介:   客户端 JavaScript 调用 ASP.NET WebService 的方法除了采用 WebServer.htc 和构造 SOAPAction 的方法外,下面介绍一个采用 Ajax调用的简单方法,并且可以传递参数。

  客户端 JavaScript 调用 ASP.NET WebService 的方法除了采用 WebServer.htc 和构造 SOAPAction 的方法外,下面介绍一个采用 Ajax调用的简单方法,并且可以传递参数。其实,ASP.NET WebService 就是一个网站,所以,Request 对象是可用的,这样,传递参数就很容易了。下面是一个WebService1.asmx的代码:

  ASMX 代码:

 
  
<% @ WebService Language = " C# " CodeBehind = " WebService1.asmx.cs " Class = " WebService1 " %>
  C#代码:
 
    
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;

/// <summary>
/// Summary description for WebService1
/// </summary>
[WebService(Namespace = " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo
= WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(
false )]
// 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 WebService1 : System.Web.Services.WebService
{
[WebMethod]
// 字符串返回测试
public string GetServerTime()
{
return " 当前服务器时间: " + DateTime.Now.ToString();
}

[WebMethod]
// long 类型返回测试
public long GetServerTimeTicks()
{
return DateTime.Now.Ticks;
}

[WebMethod]
// Datatable返回测试
public DataTable GetTestDataTable()
{
DataTable dt
= new DataTable( " TestTable " );
DataRow dr;
dt.Columns.Add(
new DataColumn( " id " , typeof (Int32)));
dt.Columns.Add(
new DataColumn( " text " , typeof ( string )));
for ( int i = 0 ; i < 6 ; i ++ )
{
dr
= dt.NewRow();
dr[
0 ] = i;
dr[
1 ] = " 列表项目 " + i.ToString();
dt.Rows.Add(dr);
}
return dt;
}

[WebMethod]
// List 类型测试
public List < User > GetTestUser()
{
// 传递参数传测试
string param = this .Context.Request.QueryString[ " param " ];
if (param == null ) param = this .Context.Request.Form[ " param1 " ];
List
< User > u_list = new List < User > ();
for ( int i = 0 ; i < 10 ; i ++ )
{
User u
= new User();
u.Name
= " LoginName " + i.ToString() + " param = " + param;
u.Title
= " 孟宪会 " + i.ToString();
u_list.Add(u);
}
return u_list;
}

// 定义一个对象 User
public class User
{
public String Name { get ; set ; }
public String Title { get ; set ; }
}
}
  HTML 代码:
 
    
<! 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 > JavaScript 调用 ASP.NET Web 服务测试 </ title >
< script type ="text/javascript" >
var xmlHttp = null ;
function createXMLHttpRequest() {
try {
if (window.XMLHttpRequest)
xmlHttp
= new XMLHttpRequest();
else if (window.ActiveXObject)
xmlHttp
= new ActiveXObject( " Microsoft.XMLHTTP " );
}
catch (ex) { }
}

function AsynRequest() {
createXMLHttpRequest();
if (xmlHttp == null ) {
alert(
" 不能创建 XmlHttpRequest 对象 " );
return ;
}
xmlHttp.open(
" GET " , " WebService1.asmx/GetTestUser?param=net_lover " , true );
xmlHttp.setRequestHeader(
" Connection " , " close " );
xmlHttp.onreadystatechange
= function () {
if (xmlHttp.readyState == 4 ) {
if (xmlHttp.status == 200 ) {
var userList = xmlHttp.responseXML.getElementsByTagName( " User " );
for (i = 0 ; i < userList.length; i ++ ) {
document.getElementById(
" get1 " ).innerHTML += userList[i].getElementsByTagName( " Name " )[ 0 ].firstChild.nodeValue + " " ;
document.getElementById(
" get1 " ).innerHTML += userList[i].getElementsByTagName( " Title " )[ 0 ].firstChild.nodeValue + " <br/> " ;
}
}
}
};
xmlHttp.send();
}

function AsynPostRequest() {
createXMLHttpRequest();
if (xmlHttp == null ) {
alert(
" 不能创建 XmlHttpRequest 对象 " );
return ;
}
var data = " param1=abc " ;
xmlHttp.open(
" POST " , " WebService1.asmx/GetTestUser?t= " + Date.parse( new Date()), true );
xmlHttp.setRequestHeader(
" Content-type " , " application/x-www-form-urlencoded " );
xmlHttp.setRequestHeader(
" Content-length " , data.length);
xmlHttp.setRequestHeader(
" Connection " , " close " );
xmlHttp.onreadystatechange
= function () {
if (xmlHttp.readyState == 4 ) {
if (xmlHttp.status == 200 ) {
var userList = xmlHttp.responseXML.getElementsByTagName( " User " );
for (i = 0 ; i < userList.length; i ++ ) {
document.getElementById(
" post1 " ).innerHTML += userList[i].getElementsByTagName( " Name " )[ 0 ].firstChild.nodeValue + " " ;
document.getElementById(
" post1 " ).innerHTML += userList[i].getElementsByTagName( " Title " )[ 0 ].firstChild.nodeValue + " <br/> " ;
}
}
}
};
xmlHttp.send(data);
}
</ script >
</ head >
< body >
< input type ="button" value ="GET 方法调用" onclick ="AsynRequest()" />
< input type ="button" value ="POST方法调用" onclick ="AsynPostRequest()" />
< div id ="get1" ></ div >
< div id ="post1" ></ div >
</ body >
</ html >
  需要注意的是:使用此方法需要在web.config里加入以下的配置:
 
     
< system.web >
< webServices >
< protocols >
< add name = "HttpPost" />
< add name = "HttpGet" />
</ protocols >
</ webServices >
</ system.web >
目录
相关文章
|
10月前
|
监控 负载均衡 JavaScript
有哪些有效的方法可以优化Node.js应用的性能?
有哪些有效的方法可以优化Node.js应用的性能?
488 69
|
9月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
910 0
|
6月前
|
JavaScript 前端开发 IDE
TypeScript vs. JavaScript:技术对比与核心差异解析
TypeScript 作为 JavaScript 的超集,通过静态类型系统、编译时错误检测和强大的工具链支持,显著提升代码质量与可维护性,尤其适用于中大型项目和团队协作。相较之下,JavaScript 更灵活,适合快速原型开发。本文从类型系统、错误检测、工具支持等多维度对比两者差异,并提供技术选型建议,助力开发者合理选择。
1191 1
|
6月前
|
监控 JavaScript 前端开发
JavaScript加密与解密技术:Hook技术应用案例分析
以上案例展示了如何利用JavaScript Hook技术结合强大且广泛采纳标准化算法(如AES),无缝地集成进Web应用程序以增强通信安全性。此种方法不仅能够确保敏感信息得到有效保护,并且由于它们操作适度透明、无需重构已存在代码基础架构而具备较高实际可行性及易操作性。
285 11
|
9月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
1038 80
|
10月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
249 4
|
11月前
|
JavaScript 前端开发 Java
js 垃圾回收机制的方法
JS回收机制方法讲解
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
574 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
12月前
|
JavaScript 前端开发 Java
深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
Array.find() 是 JavaScript 数组方法中一个非常实用和强大的工具。它不仅提供了简洁的查找操作,还具有性能上的独特优势:返回的引用能够直接影响原数组的数据内容,使得数据更新更加高效。通过各种场景的展示,我们可以看到 Array.find() 在更新、条件查找和嵌套结构查找等场景中的广泛应用。 在实际开发中,掌握 Array.find() 的特性和使用技巧,可以让代码更加简洁高效,特别是在需要直接修改原数据内容的情形。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一