1 ajax获取后台数据的几种方式

1.1 原生js的ajax方式

1.1.1 get
//第一步:创建xhr对象
let xhr = null;
if(window.XMLHttpRequest){//标准浏览器
    xhr = new XMLHttpRequest();
}else{//早期的IE浏览器
    xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
console.log("状态q"+xhr.readyState);
//第二步:准备发送请求-配置发送请求的一些行为
// url: http://10.21.19.86:8082/sdwan/monitor/tunnelDelay
xhr.open('get','https://10.21.19.86:8082/sdwan/monitor/cpuAndMem',true);
console.log("状态w"+xhr.readyState);

//第三步:执行发送的动作
xhr.send(null);
console.log("状态e"+xhr.readyState);

//第四步:指定一些回调函数
xhr.onreadystatechange = function(){
    if(xhr.readyState == 4){
        if(xhr.status == 200){
            let data = xhr.responseText;//json
            // var data1 = xhr.responseXML;
            console.log(data)
        }
    }
    // console.log("状态t"+xhr.readyState);
//
//     // console.log(1234);
}
console.log("状态r"+xhr.readyState);
1.1.2 post
window.onload = function(){
	var btn = document.getElementById('btn');
	btn.onclick = function(){
		var xhr = null;
		if(window.XMLHttpRequest){
			xhr = new XMLHttpRequest();
		}else{
			xhr = new ActiveXObject('Microsoft.XMLHTTP');
		}
		xhr.open("post","./jsondemo.php",true);
		xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		xhr.onreadystatechange = function(){
			if(xhr.readyState == 4){
				if(xhr.status == 200){
					var data = xhr.responseText;
					var obj = JSON.parse(data);
					var obj1 = eval("("+data+")");
					console.log(obj.username);
					console.log(obj.age);
					console.log(obj1.username);
					console.log(obj1.age);

				}else{
					console.log('failure');
				}
			}
		}
		var param = '{"username":"zhangsan","age":"12"}';
		xhr.send("user="+param);
	}
}

1.2 jQuery封装的ajax方式

1.2.1 $.ajax
let my_res1=[];
let list1 = {
    "Request": {
        "BusiCode": "search_res_reserved_ip",
        "BusiParams":[{
            "cust_id":"1"
        }
        ]
    },
    "PubInfo": {}
};
$.ajax({
    type : "POST",//请求方式
    contentType: "application/json;charset=UTF-8",//请求的媒体类型
    url : "https://10.21.19.86:8082/sdwan/monitor/cpuAndMem/",//请求地址
    data : JSON.stringify(list1),//数据,json字符串
    success : function(res1) {//请求成功
        // console.log(res1.data)
        my_res1 = res1.data;
    },
    error : function(e){//请求失败,包含具体的错误信息
        console.log(e.status);
        console.log(e.responseText);
    }
});
console.log(my_res1);
1.2.2 $.get

语法:

$.get(URL,callback);
$.get("https://10.21.19.86:8082/sdwan/monitor/cpuAndMem/",function(data,status){
    alert("Data: " + data + "\nStatus: " + status);
});
1.2.3 $.post

语法:

$.post(URL,data,callback);
$.post("https://10.21.19.86:8082/sdwan/monitor/cpuAndMem/",
    // contentType: "application/json;charset=UTF-8",
    JSON.stringify({ }),
    function(data,status){
        console.log(data);
        console.log(status);
});

2 ajax动态获取数据 创建页面的几种方法

以下转自ajax动态获取数据 创建页面的几种方法 今天总结一下 工作中经常会用到

2.1 通过创建和添加节点实现

$.ajax({
	url:'data/zhuye-nav.json',
	success:function(data){
	  //获取数据成功后动态添加到页面中
	  var aImg=data.result;
	  for(i=0;i<aImg.length;i++){
	         var Li='<li><a href="#/lieBiao"><img src='+aImg[i].img+'/></a></li>'
	         $('.banner-c ul').append(Li);
	  }
       }
})

2.2 字符串拼接

buildList();
function buildList(){	
    $.ajax({
        url:'data/zhuye-list.json',
        error:function(data){
            alert(data);
        },
        success:function(data){</span>
			//判断,如果是字符串就先转成json再使用;
 			if(typeof data ==="string"){
                 data = JSON.parse(data);
             }
	                
             var html = [];
             for(var i= 0,len = data.result.length;i<len;i++){
                 var item = data.result[i];
                 html.push(renderItem(item));
             }

             $('#goods ul').html(html.join('')); 
          }
       });
    }
//这里定义要动态创建的代码模块,换行用\  ,这样写结构清晰,便于后期维护修改;
//需要注意的是:下面的参数data实际就是上面的item,所以要直接写data.img;如果觉得别扭那就把下面的形参给改一个就ok了;
			function renderItem(data){
			                        var str='<li>\
						     <a href="#/lieBiao">\
							<img src="'+data.img+'" />\
							<div>\
							<span style="white-space:pre">	</span><p>'+data.name+'</p>\
								<span>'+data.jieshao+'</span>\
								<span>'+data.price+'</span>\
							</div>\
							<i></i>\
						     </a>\
						  </li>';
			   return str;
			   </pre><pre code_snippet_id="1807280" snippet_file_name="blog_20160804_18_1168966" name="code" class="javascript">

2.3 使用baidutemplate实现(推荐)

其实是个JS模板引擎,点击这里去官网上下载这个js文件,灰常灰常轻量级;
1、在html页面中需要写如下的代码</strong></span><span style="font-size:24px;">,也就是我们要动态创建的代码块,在这里我们把他当<span style="font-family: Arial, Helvetica, sans-serif;">做是一个模板来使用,注意这里的写法:一个是,另</span></span>外一个是所有的js代码块都要用分隔符包起来,分隔符的格式<% 这里是<% 这里是js代码 %>

<section id="main">
<ul>
	<!--数据通过动态添加-->
	<!--使用下面创建的模板块-->
</ul>
</section>
	<!--在这里创建一个模板块-->
	<script id="list_tpl" type="text/html">
		<%for(var i=0,len = result.length;i<len;i++){%>
			<li>
			   <a href="#/xiangQing"><img src="<%=result[i].img%>"/></a>
				<div>
					<p><%=result[i].name%></p>
					<span><%=result[i].price%></span>
				</div>
			</li>
		 <%}%>
		 <span style="white-space:pre">	</span></script>
		 </pre><pre code_snippet_id="1807280" snippet_file_name="blog_20160804_19_4996213" name="code" class="javascript">js文件中的代码这样写
		 buildListBT();
		
		function buildListBT(){
		        $.ajax({
		            url:'data/liebiao-list.json',
		            error:function(data){
		                alert(data);
		            },
		            success:function(data){
		                var html = baidu.template('list_tpl',data);
		                $('#main ul').html(html);
		            }
		        });
		    }

一定要弄明白这两个是怎么联系到一起去的,在ajax获取数据之后的success回调函数中通过baidu.template(‘list_tpl’,data); 相当于是把获取来的data数据送到list_tpl中进行了一次加工过程,list_tpl就是我们在html页面中定义的那个模板块,然后再将结果赋值给了变量html,最后将其追加到ul中;
以上说的这三种方法用着都挺方便的,但是当我们要动态创建的对象比较复杂的时候

通过节点创建和追加的方式可能就比较麻烦了,搞不好思维会乱掉,使用下面的两种方法就能很好的结局这个问题,而且在后期代码的维护方面也可以节省不少时间;











jQuery创建dom元素并给该元素添加属性及属性值、添加里面内容,最后通过append追加到页面中已有元素后面:

$('#btn').click(function () {
    let op = $("<p></p>").attr("id",'li_p').append('我是p里面添加的内容');
    $("#my_div").append(op);
})
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐