使用XmlHttpRequest调用ASP.NET Webservice的实战经验
120 浏览量
更新于2024-09-01
收藏 67KB PDF 举报
"这篇文章主要分享了作者在使用XmlHttpRequest调用Webservice时的心得体会,包括如何处理JSON数据,设置请求头以及处理响应状态。"
在Web开发中,前端与后端之间的通信是一个重要的环节,而XmlHttpRequest(简称XHR)是实现这种通信的一种常见方式。在本文中,作者提到他们因为项目需求,需要使用前端和移动客户端调用ASP.NET的Webservice来获取信息。Webservice是一种提供服务的平台,可以接收并处理来自不同源的请求,而XMLHttpRequest则是JavaScript中的一个API,用于在不刷新整个页面的情况下与服务器进行异步数据交换。
在尝试通过XmlHttpRequest调用Webservice的过程中,作者选择了JSON作为数据交换格式,原因在于JSON在JavaScript中的解析和构造相对简单且高效。在发起POST请求时,URL被设置为Webservice的asmx页面地址加上Web方法名。请求头(RequestHeader)中,Content-Type字段被设定为"application/json; charset=utf-8",表明发送的数据是JSON格式,并且字符集为UTF-8。SOAPAction字段通常用于标识Web服务方法,这里也被设置为Web方法名。
以下是一个简单的示例代码片段,展示了如何创建XMLHttpRequest对象、设置请求方法、打开连接以及处理响应状态:
```javascript
function getXmlHttp() {
var xmlHttp;
if (window.XMLHttpRequest) {
// 适用于现代浏览器
xmlHttp = new XMLHttpRequest();
} else {
// 适用于旧版IE浏览器
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
}
return xmlHttp;
}
function webservice(url, action, data, success, error, complete, failed) {
var xmlHttp = getXmlHttp(); // 获取XMLHttpRequest对象
xmlHttp.open('POST', url + '/' + action, true); // 异步请求数据
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
try {
if (xmlHttp.status == 200 && typeof success == 'function') {
success(xmlHttp.responseText);
} else if ((xmlHttp.status / 100 == 4 || xmlHttp.status / 100 == 5) && typeof error == 'function') {
error(xmlHttp.responseText);
}
} catch (e) {
if (typeof failed == 'function') {
failed(e);
}
}
}
};
xmlHttp.setRequestHeader("Content-type", "application/json; charset=utf-8");
xmlHttp.setRequestHeader("SOAPAction", action);
xmlHttp.send(JSON.stringify(data)); // 发送JSON格式的数据
}
```
这个`webservice`函数接收Webservice的URL、Web方法名、JSON格式的数据以及各种回调函数。当请求成功时,`success`回调会被调用,传入响应的文本;如果发生错误,`error`回调会被调用;在所有操作完成后,无论成功还是失败,`complete`回调都会被执行。此外,还存在一个`failed`回调用于捕获可能的异常。
通过这种方式,前端能够与Webservice进行交互,获取或发送数据,实现了前后端的通信。然而,需要注意的是,跨域访问(CORS)和安全问题也需要在实际应用中予以考虑和配置,以确保数据传输的安全和有效。此外,随着技术的发展,如今更多地使用fetch API或者axios等库来替代原生的XMLHttpRequest,以获得更现代、更简洁的API使用体验。
2009-07-06 上传
点击了解资源详情
2012-01-08 上传
2012-03-21 上传
2010-02-23 上传
2010-05-06 上传
2009-03-10 上传
2011-12-29 上传
2018-12-19 上传
weixin_38657835
- 粉丝: 3
- 资源: 931
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录