js ajax 兼容多浏览器 get post 解决乱码 响应过程全齐了

本文介绍了一种通过Ajax实现GET和POST请求的方式,包括如何创建XMLHttpRequest对象,并处理跨浏览器兼容性问题。此外,还提供了一个实用的JSON字符串转换函数,以便于服务器端接收和解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

	//将JSON对象解析为字符串,再替换相应符号  
	function JSONStringify(obj) {
		return JSON.stringify(obj).replace(/"|{|}/g, "").replace(/:/g, "=")
				.replace(/,/g, "&");
	}
	
	
	function getServerDataUseAjax(method, url, params) {
		//开始初始化XMLHttpRequest对象
		var http_request = false;
		if (window.XMLHttpRequest) { //Mozilla 浏览器
			http_request = new XMLHttpRequest();
			if (http_request.overrideMimeType) {//设置MiME类别
				http_request.overrideMimeType('text/xml');
			}
		} else if (window.ActiveXObject) { // IE浏览器
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
				}
			}
		}
		if (!http_request) { // 异常,创建对象实例失败
			window.alert("不能创建XMLHttpRequest对象实例.");
			return false;
		}

		//不同请求方式的请求过程不同  
		//开发过程中 80%的开发使用 get 方式请求
		if (method.toLowerCase() == "get") {
			//这里加上时间戳是为了解决低版本ie浏览器缓存问题
			//另:这里额外调用了一个方法对传入的JSON对象进行了解析并字符串重组
			url += "?" + JSONStringify(params) + "×tamp"
					+ new Date().getTime();
			//如果不是IE浏览器就执行 
           // if(navigator.userAgent.indexOf("MSIE")<=0){
             //   netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
           // }
			//注意这里是两次encodeURI()
			http_request.open(method, encodeURI(encodeURI(url)), true);

			// 处理返回信息的函数
			http_request.onreadystatechange = function () {
				if (http_request.readyState != 4) { // 判断对象状态
					//id loading_inserHTML
					// document.getElementById('MerchName').innerHTML="正在加载数据……"; 
					//alert(4);
				} else {
					if (http_request.status == 200 || http_request.status == 0) { // 信息已经成功返回,开始处理信息
						var strHTML = http_request.responseText;
						//ok_innerHTML
						//document.getElementById('MerchName').innerHTML=strHTML;
						alert(strHTML);
					} else { //页面不正常
						alert("您所请求的页面有异常。");
					}
				}
			};
			//开始发送请求
			http_request.send(null);
		} else {
			if (method.toLowerCase() == "post") {
				if (method.toLowerCase() == "post") {
					http_request.open(method, url, true);
					http_request.setRequestHeader("Content-Type",
							"application/x-www-form-urlencoded");
					// 处理返回信息的函数
					http_request.onreadystatechange = function () {
						if (http_request.readyState != 4) { // 判断对象状态
							// document.getElementById('MerchName').innerHTML="正在加载数据……"; 
							//alert(4);
						} else {
							if (http_request.status == 200 || http_request.status == 0) { // 信息已经成功返回,开始处理信息
								var strHTML = http_request.responseText;
								//document.getElementById('MerchName').innerHTML=strHTML;
								alert(strHTML);
							} else { //页面不正常
								alert("您所请求的页面有异常。");
							}
						}
					};
					//开始发送请求
					http_request.send(JSONStringify(params));
				} else {
					//http请求类别参数错误    
					window.alert("http请求类别参数错误..");
					return false;
				}
			}
		}
	}

	function test() {
		//{name:'jack',age:88}
		//注意这里给的参数对象是JSON对象格式
		getServerDataUseAjax("get", "test", {
			name : "天上人间",
			age : 88
		});
	}
使用时需要 服务器端解码  URLDecoder.decode(request.getParameter("name"), "UTF-8")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值