大家好,欢迎来到IT知识分享网。
在网上查看了很多js的ajax封装函数
发现大部分都没有实现跨域请求
所以跨域请求浏览器就会提示:No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
于是封装了一个跨域请求的ajax函数:
js代码:
[html] view plain copy
- function ajax(obj) {
- // 对实参处理
- obj = obj || {};
- // 定义局部变量
- var xmlhttp, type, url, async, dataType, data;
- // 默认type为GET
- type = trim(obj.type).toUpperCase() || ‘GET’;
- // 接口
- url = trim(obj.url) || window.location.href;
- // 默认为异步请求
- async = obj.async || true;
- // 设置跨域
- dataType = trim(obj.dataType).toUpperCase() || ‘HTML’;
- // 发送参数
- data = obj.data || {};
- // 删除左右空格
- function trim(str) {
- return str.replace(/^\s+|\s+$/g, “”);
- };
- // 定义格式化参数函数
- var formatParams = function() {
- if (typeof(data) == “object”) {
- var str = “”;
- for (var pro in data) {
- str += pro + “=” + data[pro] + “&”;
- }
- data = str.substr(0, str.length – 1);
- }
- if (type == ‘GET’ || dataType == ‘JSONP’) {
- if (url.lastIndexOf(‘?’) == -1) {
- url += ‘?’ + data;
- } else {
- url += ‘&’ + data;
- }
- }
- }
- // 第一步,创建xmlhttprequest对象用来和服务器交换数据。
- if (window.XMLHttpRequest) {
- //Chrome || Firefox
- xmlhttp = new XMLHttpRequest();
- } else {
- //IE
- xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);
- }
- // 跨域请求
- if (dataType == ‘JSONP’) {
- if (typeof(obj.beforeSend) == ‘function’) obj.beforeSend(xmlhttp);
- var callbackName = (‘jsonp_’ + Math.random()).replace(“.”, “”);
- var oHead = document.getElementsByTagName(‘head’)[0];
- data.callback = callbackName;
- var ele = document.createElement(‘script’);
- ele.type = “text/javascript”;
- ele.onerror = function() {
- console.log(‘failed’);
- obj.error && obj.error(“failed”);
- };
- oHead.appendChild(ele);
- window[callbackName] = function(json) {
- oHead.removeChild(ele);
- window[callbackName] = null;
- obj.success && obj.success(json);
- };
- formatParams();
- ele.src = url;
- return;
- } else {
- formatParams();
- // 第二步,打开链接
- xmlhttp.open(type, url, async);
- // 设置响应头
- xmlhttp.setRequestHeader(“Content-type”, “application/x-www-form-urlencoded;charset=utf-8”);
- if (typeof(obj.beforeSend) == ‘function’) obj.beforeSend(xmlhttp);
- // 第三步,发送请求
- xmlhttp.send(data);
- // 第四步,响应处理
- xmlhttp.onreadystatechange = function() {
- if (xmlhttp.status != 200) {
- console.log(xmlhttp.status + ‘failed’);
- obj.error && obj.error(xmlhttp.status + ‘failed’);
- return;
- }
- if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
- if (dataType == ‘JSON’) {
- try {
- res = JSON.parse(xmlhttp.responseText);
- } catch (e) {
- console.log(‘json格式错误’);
- obj.error(‘json格式错误’);
- }
- } else if (dataType == ‘XML’) {
- res = xmlhttp.responseXML;
- } else {
- res = xmlhttp.responseText;
- }
- obj.success && obj.success(res);
- }
- }
- }
- }
使用示例:
[html] view plain copy
- ajax({
- url: ”,
- type: ‘get’,
- dataType: ‘jsonp’,
- success: function(data) {
- },
- error: function() {
- }
- })
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/43047.html