fetch学习笔记(一)

学习和使用fetch时觉得写法简便,便于逻辑编写es6嘛,但是很难用,网上资料基本上都是以node为后台的官方也是,资料不多,大多都是转发别人重复多,我这个是以java为后台所以自学摸得难受。

前段普通的get请求

body

<body>
	<div>
		<input  name="uploadFile" id="aa" type="file"/>
		
		<button id="btn">获取信息</button>
	</div>
</body>

javascript

	$(function(){
		var btn=document.getElementById('btn');
btn.onclick=function(){
fetch('http://localhost:8080/image/FetchServlet', {
				    method: "get",
				    mode:"cors",//是否允许跨域请求,以及那些响应的属性是可读的cors默认允许跨域请求,准守cors协议。no-cors:该模式允许来自 CDN 的脚本、其他域的图片和其他一些跨域资源。前提条件是请求的 method 只能是 HEAD、GET 或 POST。same-origin:如果是一个跨域请求,将返回一个 error.navigate:支持导航的模式,仅用于 HTML 导航
				    redirect:'follow',//定义重定向处理方式。可选值:follow(默认), error, manual。
				    headers:new Headers({
				    	'Content-Type':'text/plain',
				    	
				    }),credentials:'omit',//(默认)omit不发送 Cookie,same-origin:同域下自动发送 Cookie,include:始终发送 Cookie,即使是跨域
				    cache:'default'
				    /*
				    	  default:浏览器在其 HTTP 缓存中查找匹配的请求。
	                    a. 如果匹配并且是新鲜的,它将从缓存中返回。
	                    b. 如果存在匹配但已失效,则浏览器将向远程服务器发出有条件的请求。如果服务器指出资源没有改变,它将从缓存中返回。
	                        否则资源将从服务器下载并且缓存将被更新。
	                    c. 如果没有匹配,浏览器将发出正常的请求,并且下载的资源更新缓存。
	        no-store:浏览器从远程服务器获取资源,而不先查看缓存,并且不会使用下载的资源更新缓存。
	        reload:浏览器从远程服务器获取资源,而不先查看缓存,但随后将使用下载的资源更新缓存。
	        no-cache:浏览器在其 HTTP 缓存中查找匹配的请求。
	                     a. 如果匹配,新鲜或陈旧,浏览器将向远程服务器发出有条件的请求。如果服务器指出资源没有改变,它将从缓存中返回。
	                         否则资源将从服务器下载并且缓存将被更新。
	                     b. 如果没有匹配,浏览器将发出正常的请求,并用下载的资源更新缓存。
	        force-cache:浏览器在其 HTTP 缓存中查找匹配的请求。
	                     a. 如果有匹配,新鲜或陈旧,它将从缓存中返回。
	                     b. 如果没有匹配,浏览器将发出正常的请求,并用下载的资源更新缓存。
	        only-if-cached:浏览器在其 HTTP 缓存中查找匹配的请求。只能用在 mode 为 same-origin 的情况下
	                     a. 如果匹配,新鲜或陈旧,将从缓存中返回。
	                     b. 如果没有匹配,浏览器将返回一个错误。
				    */
				    
				}).then(function(response) {
					console.log(response)
				    return response.json()//后台json传所以json接
				}).then(function(data) {
				    console.log(data)
				    $.each(data,function(i,item){
				    	console.log(item.username)
				    });
				}).catch(function(e) {
				  	console.log("Oops, error");
				}); 
})

后台是原生servlet没有框架

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub

		 PrintWriter out = response.getWriter();
		 // 输出数据
	     ArrayList<Users> arraylistUsers = new ArrayList<Users>();
	     Users user = new Users();
	     user.setUsername("aaaaaaaaaaaaaaa");
	     Users user1 = new Users();
	     user1.setUsername("bbbbb");
		 Gson gson=new Gson();
		 arraylistUsers.add(user);
		 arraylistUsers.add(user1);
	     System.out.println(gson.toJson(arraylistUsers));
	     out.write(gson.toJson(arraylistUsers));
	}

效果图


post请求


javascript

	$(function(){
		var btn=document.getElementById('btn');
let formData = new FormData(); 
	 	formData.append('name','login');
		formData.append('age',123); 
btn.onclick=function(){
    fetch('http://localhost:8080/image/FetchServlet', {
		method:"POST",
		body:formData
	}); 
    } 
})
后台
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		DiskFileItemFactory factory = new DiskFileItemFactory();   
        ServletFileUpload upload = new ServletFileUpload(factory);   
        upload.setHeaderEncoding("UTF-8");  
       
        List items;
		try {
			items = upload.parseRequest(request);
			 Map params = new HashMap();   
		        for(Object object:items){  
		            FileItem fileItem = (FileItem) object;   
		            if (fileItem.isFormField()) {   
		                params.put(fileItem.getFieldName(), fileItem.getString("utf-8"));//如果你页面编码是utf-8的   
		            }  
		        }   
		        //使用params.get获取参数值
		        String send_time = (String) params.get("name");
		        String ages = (String) params.get("age");
		        System.out.println(send_time);
		        System.out.println(ages);
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
       
		
	}

执行结果


关于兼容性的话不高,ie9以下不支持(比如es6写法.catch写法,ie8就说我不认识他),各大浏览器还是支持的

官方给出兼容性方法

if(self.fetch){
    //这里写fetch
}else{
    ajax或者原生异步
}





猜你喜欢

转载自blog.csdn.net/as66708/article/details/81014265