使用XmlHttpRequest调用ASP.NET Webservice的实战经验
114 浏览量
更新于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 上传
点击了解资源详情
2010-05-06 上传
2012-03-21 上传
2012-01-08 上传
2010-02-23 上传
2009-03-10 上传
2009-08-05 上传
2012-05-29 上传
weixin_38657835
- 粉丝: 3
- 资源: 931
最新资源
- IEEE 14总线系统Simulink模型开发指南与案例研究
- STLinkV2.J16.S4固件更新与应用指南
- Java并发处理的实用示例分析
- Linux下简化部署与日志查看的Shell脚本工具
- Maven增量编译技术详解及应用示例
- MyEclipse 2021.5.24a最新版本发布
- Indore探索前端代码库使用指南与开发环境搭建
- 电子技术基础数字部分PPT课件第六版康华光
- MySQL 8.0.25版本可视化安装包详细介绍
- 易语言实现主流搜索引擎快速集成
- 使用asyncio-sse包装器实现服务器事件推送简易指南
- Java高级开发工程师面试要点总结
- R语言项目ClearningData-Proj1的数据处理
- VFP成本费用计算系统源码及论文全面解析
- Qt5与C++打造书籍管理系统教程
- React 应用入门:开发、测试及生产部署教程