Ajax使用(引用)

本文详细介绍了Ajax对象的创建、配置、GET/POST请求方法及处理响应数据的流程,并通过实例展示了如何使用Ajax对象获取和发送数据。

Ajax对象:


function Ajax(recvType){

var aj=new Object();
aj.recvType=recvType ? recvType.toUpperCase() : 'HTML' //HTML XML
aj.targetUrl='';
aj.sendString='';
aj.resultHandle=null;


aj.createXMLHttpRequest=function(){
var request=false;

//window对象中有XMLHttpRequest存在就是非IE,包括(IE7,IE8)
if(window.XMLHttpRequest){
request=new XMLHttpRequest();


if(request.overrideMimeType){
request.overrideMimeType("text/xml");
}



//window对象中有ActiveXObject属性存在就是IE
}else if(window.ActiveXObject){

var versions=['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];


for(var i=0; i<versions.length; i++){
try{
request=new ActiveXObject(versions[i]);


if(request){
return request;
}
}catch(e){
request=false;
}
}
}
return request;
}


aj.XMLHttpRequest=aj.createXMLHttpRequest();


aj.processHandle=function(){
if(aj.XMLHttpRequest.readyState == 4){
if(aj.XMLHttpRequest.status == 200){
if(aj.recvType=="HTML")
aj.resultHandle(aj.XMLHttpRequest.responseText);
else if(aj.recvType=="XML")
aj.resultHandle(aj.XMLHttpRequest.responseXML);
}
}
}


aj.get=function(targetUrl, resultHandle){
aj.targetUrl=targetUrl;

if(resultHandle!=null){
aj.XMLHttpRequest.onreadystatechange=aj.processHandle;
aj.resultHandle=resultHandle;
}
if(window.XMLHttpRequest){
aj.XMLHttpRequest.open("get", aj.targetUrl);
aj.XMLHttpRequest.send(null);
}else{
aj.XMLHttpRequest.open("get", aj.targetUrl, true);
aj.XMLHttpRequest.send();
}

}


aj.post=function(targetUrl, sendString, resultHandle){
aj.targetUrl=targetUrl;


if(typeof(sendString)=="object"){
var str="";
for(var pro in sendString){
str+=pro+"="+sendString[pro]+"&";
}
aj.sendString=str.substr(0, str.length-1);
}else{
aj.sendString=sendString;
}


if(resultHandle!=null){
aj.XMLHttpRequest.onreadystatechange=aj.processHandle;
aj.resultHandle=resultHandle;
}


aj.XMLHttpRequest.open("post", targetUrl);
aj.XMLHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
aj.XMLHttpRequest.send(aj.sendString);

}


return aj;

}




-------------------------------------------------------------------------------------------------------------------------------------------------

使用方法


ajax.get("server.php?username=zhangsan&email=aaa@bbb", function(data){});


ajax.post("server.php", "username=value&aaa=bb", function(data){});
 




<think>我们正在讨论如何引用AJAX技术。根据引用内容,AJAX是一种用于创建异步Web应用的技术,它允许在不重新加载整个页面的情况下与服务器交换数据。引用AJAX主要涉及以下几个方面: 1. **直接使用原生JavaScript的XMLHttpRequest对象**:这是最基础的方式,不需要引入外部库。 2. **使用第三方库(如jQuery)**:jQuery提供了简化的AJAX方法,使得使用更加方便。 3. **使用专门的AJAX库(如Axios)**:Axios是一个基于Promise的HTTP客户端,适用于浏览器和Node.js。 4. **在特定框架中使用(如ASP.NET AjaxPro)**:如引用[3]所示,在ASP.NET中可以通过注册AjaxPro来使用。 接下来,我将分别介绍这几种方式的具体引用方法。 ### 一、原生JavaScript方式(XMLHttpRequest) ```javascript // 创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); // 配置请求:方法、URL、是否异步 xhr.open('GET', 'https://api.example.com/data', true); // 设置状态改变时的回调函数 xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 请求成功,处理响应数据 console.log(JSON.parse(xhr.responseText)); } }; // 发送请求 xhr.send(); ``` > 注意:现代浏览器也支持`fetch` API,它是基于Promise的更现代替代方案[^1]。 ### 二、jQuery方式 需先引入jQuery库: ```html <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> ``` 然后使用`$.ajax`方法: ```javascript $.ajax({ url: 'https://api.example.com/data', method: 'GET', dataType: 'json', success: function(data) { console.log(data); }, error: function(error) { console.error('Error:', error); } }); ``` > jQuery简化了AJAX调用,并处理了浏览器兼容性问题[^2]。 ### 三、Axios方式 需先引入Axios库: ```html <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> ``` 然后发起请求: ```javascript axios.get('https://api.example.com/data') .then(function (response) { console.log(response.data); }) .catch(function (error) { console.error(error); }); ``` > Axios支持Promise,并提供了拦截器等高级功能[^4]。 ### 四、ASP.NET AjaxPro方式(适用于.NET环境) 1. 添加AjaxPro引用(通过NuGet或手动添加DLL) 2. 在页面加载时注册类型: ```csharp protected void Page_Load(object sender, EventArgs e) { AjaxPro.Utility.RegisterTypeForAjax(typeof(YourClassName)); } ``` 3. 在服务器端方法添加`[AjaxMethod]`属性: ```csharp [AjaxPro.AjaxMethod] public static string GetServerData() { return "Data from server"; } ``` 4. 客户端JavaScript调用: ```javascript YourClassName.GetServerData(function(response) { alert(response.value); }); ``` > 此方式适用于ASP.NET Web Forms项目[^3]。 ### 五、现代浏览器fetch API(无需引入库) ```javascript fetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); ``` ### 选择建议 | 方式 | 适用场景 | |-------------------|----------------------------------| | 原生XMLHttpRequest| 无需额外库、小型项目 | | jQuery | 已有jQuery的项目、快速开发 | | Axios | 需要高级功能(拦截器、取消请求) | | fetch API | 现代浏览器、追求轻量化 | | AjaxPro | ASP.NET Web Forms项目 | ### 注意事项 1. **跨域问题**:如果请求不同域的接口,需要服务器设置CORS(跨域资源共享)[^1] 2. **错误处理**:始终处理AJAX失败情况,避免程序静默失败 3. **安全性**:防止XSS(跨站脚本攻击)和CSRF(跨站请求伪造) > 根据项目需求选择合适的方式,现代项目推荐使用`fetch`或`axios`[^4]。 §§相关问题§§ 1. 如何解决AJAX请求中的跨域问题? 2. AJAX与Fetch API的主要区别是什么? 3. 在Vue/React中如何优雅地使用AJAX? 4. AJAX请求如何防止CSRF攻击? 5. 如何处理AJAX请求的超时? </think> ## AJAX引用方法详解 根据引用内容,AJAX引用方式主要有以下几种: ### 一、原生JavaScript方式(XMLHttpRequest) ```javascript // 1. 创建XMLHttpRequest对象 const xhr = new XMLHttpRequest(); // 2. 配置请求(方法、URL、异步) xhr.open('GET', 'https://api.example.com/data', true); // 3. 设置回调函数处理响应 xhr.onload = function() { if (xhr.status >= 200 && xhr.status < 300) { console.log(JSON.parse(xhr.responseText)); } else { console.error('请求失败:', xhr.statusText); } }; // 4. 处理错误 xhr.onerror = function() { console.error('网络错误'); }; // 5. 发送请求 xhr.send(); ``` > 这是AJAX最基础的实现方式,所有现代浏览器都支持。 ### 二、jQuery方式(推荐简单项目) ```html <!-- 1. 引入jQuery库 --> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> // 2. 使用$.ajax方法 $.ajax({ url: 'https://api.example.com/data', method: 'GET', dataType: 'json', success: function(data) { console.log(data); }, error: function(xhr, status, error) { console.error('请求失败:', error); } }); // 简写形式 $.getJSON('https://api.example.com/data', function(data) { console.log(data); }); </script> ``` > jQuery简化了AJAX调用,处理了浏览器兼容性问题。 ### 三、Axios方式(推荐现代项目) ```html <!-- 1. 引入Axios --> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <script> // 2. 发起请求 axios.get('https://api.example.com/data') .then(function (response) { console.log(response.data); }) .catch(function (error) { console.error('请求失败:', error); }); // POST请求示例 axios.post('/save-data', { name: 'John', age: 30 }) .then(response => console.log(response)); </script> ``` > Axios基于Promise设计,支持请求拦截等高级功能[^4]。 ### 四、ASP.NET AjaxPro方式(.NET专用) ```csharp // 1. 后端注册(Page_Load事件) protected void Page_Load(object sender, EventArgs e) { AjaxPro.Utility.RegisterTypeForAjax(typeof(YourPageClass)); } // 2. 添加Ajax方法 [AjaxPro.AjaxMethod] public static string GetServerTime() { return DateTime.Now.ToString(); } ``` ```javascript // 3. 前端调用 YourPageClass.GetServerTime(function(response) { alert(response.value); }); ``` > 适用于ASP.NET Web Forms项目[^3]。 ### 五、现代Fetch API(无需引入库) ```javascript // 1. 发起GET请求 fetch('https://api.example.com/data') .then(response => { if (!response.ok) throw new Error('网络响应异常'); return response.json(); }) .then(data => console.log(data)) .catch(error => console.error('请求失败:', error)); // 2. POST请求示例 fetch('/api/submit', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ key: 'value' }) }); ``` > 现代浏览器原生支持的方案,无需额外引入库。 ### 引用方案对比 | 方式 | 优点 | 缺点 | 适用场景 | |------------------|-------------------------------|--------------------------|-----------------------| | XMLHttpRequest | 无需外部库,浏览器原生支持 | 代码冗长,兼容性处理复杂 | 简单请求,学习用途 | | jQuery | 语法简洁,兼容性好 | 需引入整个jQuery库 | 已有jQuery的项目 | | Axios | 功能强大,Promise支持 | 需额外引入 | 现代Web应用 | | Fetch API | 现代标准,语法简洁 | 低版本浏览器不支持 | 现代浏览器环境 | | ASP.NET AjaxPro | .NET集成度高 | 仅限.NET环境 | ASP.NET Web Forms项目 | > 根据项目需求选择合适的方式,现代项目推荐使用**Axios**或**Fetch API**[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值