为什么List<List<String>>,类型的数据不能通过ajax.post传到后台去

为什么List>,类型的数据不能通过ajax.post传到后台去

6个回答

不管是ajax还是表单提交,都是http方式的传输,支持文本和流式传递,跟具体数据结构没有关系,你可以把传输的数据
组装成数组形式传递,也可以json传递,后台按照List<List<String>>这样的数据结构,可能你用用一些如dwr这样的工具,
但本质都是http,这是不可改变的。http是协议,可以跨语言的,所以数据结构都需要被其他语言解析。

问题描述不清,可以传

其实不是不能,,而是你不会而已,,

没有代码的问BUG问题就是耍流氓

今天做双层遍历就可以传

最好组装成json,也好取值。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何用ajax从asp后太的list获取数据到前端 生成表格 (取到集合字段的值就行了)
如何用ajax从asp后太的list获取数据到前端 生成表格 (取到集合字段的值就行了) 后端传前端有点蒙 ,麻烦各位指点,谢谢 前端代码 $(function () { $.ajax({ type: 'post', url: 'test1.ashx', dataType: 'text', data: { }, success: function (data) { //var obj_line = $.parseJSON(data); //for (var i = 0; i < obj_line.length; i++) { // alert(data[i].ProductName); //} }, error: function(){ alert("服务器端异常"); } }) } ); 后端代码 ashx文件下的 public class test1 : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; JavaScriptSerializer jss = new JavaScriptSerializer(); List<Product> list = ProductBLL.ShowProduct(); context.Response.Write(jss.Serialize(list)); context.Response.End(); } bll层 public static List<Product> ShowProduct() { return ProductDAL.ShowProduct(); } dal层 public static List<Product> ShowProduct() { string sql = string.Format("select * from Product"); SqlDataReader dr = DBHelper.reDr(sql); List<Product> list = new List<Product>(); while (dr.Read()) { Product p = new Product() { ProductID=int.Parse(dr["ProductID"].ToString()), ProductName= dr["ProductName"].ToString(), ProductPric= dr["ProductPric"].ToString(), ProductPrice=double.Parse( dr["ProductPrice"].ToString()), ProductDese = dr["ProductDese"].ToString(), ClassID= int.Parse(dr["ClassID"].ToString()), AddTime=DateTime.Parse(dr["AddTime"].ToString()) }; list.Add(p); } dr.Close(); return list; } } 实体类models public class Product { public int ProductID { get; set; } public string ProductName { get; set; } public string ProductPric { get; set; } public Double ProductPrice { get; set; } public string ProductDese { get; set; } public int ClassID { get; set; } public DateTime AddTime { get; set; } }
Kendo.for.AspNet.Core 2019.1.115 Grid 绑定数据不成功?
我使用vs2017 结合Kendo.for.AspNet.Core插件实现列表页面,但是一直绑定数据不成功,提示:Failed to load resource: the server responded with a status of 400 (Bad Request) List页面代码: ``` @using Kendo.Mvc.UI; <div> @(Html.Kendo().Grid<GridModel>() .Name("Grid") .Columns(columns => { columns.Bound(p => p.name).Width(150); columns.Bound(p => p.yearly).Width(150); columns.Bound(p => p.wordtext).Width(150); columns.Bound(p => p.ModelId).Width(130); columns.Command(command => command.Destroy()).Width(160); }) .ToolBar(toolbar => { toolbar.Create(); }) .Editable(editable => editable.Mode(GridEditMode.InCell)) .Pageable() .Navigatable() .Sortable() .Groupable() .Filterable() .Scrollable() .DataSource(dataSource => dataSource .Ajax() .Batch(true) .PageSize(20) .ServerOperation(false) .Read("List_Read", "KendoGrid") ) ) </div> ``` 控制器: ``` public class KendoGridController : Controller { public ActionResult List() { return View(); } [HttpPost] public ActionResult List_Read([DataSourceRequest] DataSourceRequest request) { IEnumerable<GridModel> Read = GetAll(); return Json(Read.ToDataSourceResult(request)); } public IList<GridModel> GetAll() { var result = Enumerable.Range(0, 50).Select(i => new GridModel { name = "test", yearly = DateTime.Now.Year, wordtext = "测试", ModelId = i }).ToList(); return result; } } ``` Model: ``` public class GridModel { public string name { get; set; } public int yearly { get; set; } public string wordtext { get; set; } public int ModelId { get; set; } } ``` ![图片说明](https://img-ask.csdn.net/upload/202002/23/1582446976_769135.png)
ajax遍历list集合想要获取String类型,结果出现Object类型
![图片说明](https://img-ask.csdn.net/upload/201710/08/1507471299_981233.jpg) js代码 function queryPage(){ var moneysel=$("#moneysel").val(); var time1=$("#time1").val(); var time2=$("#time2").val(); $.post("ContentSel",{"moneysel":moneysel,"time1":time1,"time2":time2,"pageIndex":pageIndex,"pageSize":pageSize},function(data,status){ if(status){ //移除上个分页数据 $(".even").remove(); $(".odd").remove(); //将返回结果转化为json data=eval("("+data+")"); var list=data.list; for(var i=0;i<list.length;i++){ var name=""; if(i%2==0){ name="class='even'";//偶数 }else{ name="class='odd'";//奇数 } $("#myTable").append("<tr"+name+">"+"<td>"+list[i].id+"</td>"+"<td>"+list[i].content+"</td>"+"<td>"+list[i].sum+"</td>"+"<td>"+list[i].time+"</td>"+"<td>"+list[i].title+list[i].genre+"</td>"+"<td><a>删除</a></td>" +"</tr>"); } pageIndex=data.pageIndex; pageTotal=data.pageTotal; $("#page1").text(pageIndex+"/"+pageTotal); //删除确认操作 $("a.delete").click(function(){ var r=confirm("确定要删除该条记录吗?"); return r; }) } }) } 后台代码部分 Moneyservice ms=new Moneyserviceimpl(); if(moneysel.equals("0")||moneysel.equals("1")){ Page<Money> page=ms.getMyMoneyPage(userId, Integer.parseInt(moneysel), Integer.parseInt(pageIndex), Integer.parseInt(pageSize)); //将集合或对象序列化成json字符串 String json = JSONSerializer.toJSON(page).toString(); PrintWriter writer=response.getWriter(); writer.print(json); writer.close(); }else{ Page<Money> page=ms.getMyMoneyPageNogenry(userId, 1,5); //将集合或对象序列化成json字符串 String json = JSONSerializer.toJSON(page).toString(); PrintWriter writer=response.getWriter(); writer.print(json); writer.close(); return; }
Ajax后台向前台传json或者string类型的数据,前台收到的数据都是object
前台代码: function pay(){ var map = new Map(); $.ajax({ type:"POST",//提交请求的方式 url:"/interface/servlet/paypay",//访问servlet的路径 dataType:"json",//没有这个,将把后台放会的json解析成字符串 data:$('#pay_submit').serialize(),//把内容序列化 async:true,//是否异步 error:function(data) {//请求出错 alert("出错"); }, success:function(data) {//获得返回值 console.log(data.allmap); alert(data.BUSI_DATA.ORDER_FEE); //var json =eval("("+data+")"); var bankForm = document.createElement("form"); bankForm.method = "post"; bankForm.action = "http://211.103.90.62:7061/payagent/PayUnifiedAccess"; bankForm.id = "IDataForm"; //var json = eval("("+map+")"); //for(var x in json){ var input = document.createElement("input"); input.id = "data"; input.name = "data"; input.type = "hidden"; //input.value ='{"PUB_INFO":{"BUSI_CODE":"1001","OS":"PC","VERIFY_CODE":"a902f90288e4fe8d6e2196499aa90f11b1efd98565f87ce14d9b39701e9d71794bde30a4269e69bd3caf3f754e5c6f9104c67abf207e869210979baf51ce7741f4831ee469e6c76c5828998b0f5d6febf3b95f7f9d9d23908beab2694c7279d52503498a6de5f2109ca68a43f89b3f7068892e29ab5bb34d739acb8fc3d71841"},"BUSI_DATA":{"ORDER_FEE":"1","GOODS_LIST":[{"TOTAL_MONEY":"1","GOODS_PRICE":"100","GOODS_NUM":"1","GOODS_NAME":"诺基亚","GOODS_ID":"0058812","GOODS_ITEM":"1"}],"PEER_TRADE_ID":"2017073011216092","ORDER_DESC":"陈小庆测试","MERCHANT_ID":"1517061200000251","ACCOUNT_CODE":"18322581301","VALID_TIME":"30"}}';// input.value = data; bankForm.appendChild(input); //} document.body.appendChild(bankForm); var submitAction = document.getElementById("IDataForm"); submitAction.submit(); } }); } 后台代码: protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { log.debug("================"); IData goodsInfo=new DataMap(); IDataset goodsList=new DatasetList(); DataMap pubInfo=new DataMap(); DataMap busiDataMap=new DataMap(); DataMap allMap=new DataMap(); goodsInfo.put("GOODS_ITEM", "1"); goodsInfo.put("GOODS_NAME", "诺基亚"); goodsInfo.put("GOODS_PRICE", "100"); goodsInfo.put("GOODS_NUM", "1"); goodsInfo.put("TOTAL_MONEY", "1"); goodsInfo.put("GOODS_ID", "0058812"); goodsInfo.put("TOTAL_MONEY", "1"); goodsList.add(goodsInfo); //goodsList.push(GOODS_LIST=goodsInfo); pubInfo.put("OS", "PC"); pubInfo.put("BUSI_CODE","1001"); busiDataMap.put("PEER_ORDER_ID","2017073011216092"); busiDataMap.put("ORDER_DESC","测试"); busiDataMap.put("ORDER_FEE","1"); busiDataMap.put("VALID_TIME","30"); busiDataMap.put("ACCOUNT_CODE","18322581301"); busiDataMap.put("MERCHANT_ID","1517061200000251");//商户号 busiDataMap.put("GOODS_LIST",goodsList);//商户号 allMap.put("PUB_INFO",pubInfo); allMap.put("BUSI_DATA",busiDataMap); log.debug(allMap); JSONObject json=JSONObject.fromObject(allMap); json.accumulate("data",allMap); req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); resp.setContentType("text/html"); PrintWriter out=resp.getWriter(); //out.print(JSON.toJSONString(json)); out.print(json.toString()); out.flush(); out.close(); } 后台代码中map包含多个集合,这些参数能直接以json形势传到前台整体取出来吗?求大神指教啊
list<map<string object>>json数据
如标题,后台是数据类型是这样:list<map<string object>>,转换成json数据后,在前台怎么获取?ajax操作。
怎么用servlet获取oracle数据库信息后传递到jquery的ajax上进行验证
``` package com.ibm.ajax.app1.entity; public class WebUser { private String uname; public WebUser(String uname){ this.uname=uname; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } } ``` ``` package com.ibm.ajax.app1.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.List; import java.util.Vector; import com.ibm.ajax.app1.entity.WebUser; public class WebUserDao { public List<WebUser> queryList() throws Exception{ String username="gdx"; String password="wazzh"; String url="jdbc:oracle:thin:@//localhost:1521/orcl"; String driver="oracle.jdbc.driver.OracleDriver"; List<WebUser> lists=new Vector<WebUser>(); Class.forName(driver); Connection conn=DriverManager.getConnection(url, username, password); Statement stmt =conn.createStatement(); ResultSet rs=stmt.executeQuery("select UNAME from webUser"); while(rs.next()){ WebUser webuser=new WebUser(rs.getString("UNAME")); lists.add(webuser); } return lists; } } ``` ``` package com.ibm.ajax.app1.service.impl; import java.util.List; import com.ibm.ajax.app1.dao.WebUserDao; import com.ibm.ajax.app1.entity.WebUser; import com.ibm.ajax.app1.service.IWebUserService; public class WebUserServiceImpl implements IWebUserService { private WebUserDao webuserdao= new WebUserDao(); @Override public List<WebUser> getWebUserList() throws Exception { List<WebUser> lists= webuserdao.queryList(); return lists; } } ``` ``` package com.ibm.ajax.app1.service; import java.util.List; import com.ibm.ajax.app1.entity.WebUser; public interface IWebUserService { //获取我建立的实体对象WebUser的list表 public List<WebUser> getWebUserList() throws Exception; } ``` ``` package com.ibm.ajax.app1.servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ibm.ajax.app1.entity.WebUser; import com.ibm.ajax.app1.service.IWebUserService; import com.ibm.ajax.app1.service.impl.WebUserServiceImpl; /** * Servlet implementation class ValiateUserNameServlet */ public class ValiateUserNameServlet extends HttpServlet { private static final long serialVersionUID = 1L; private IWebUserService webuserservice; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { webuserservice = new WebUserServiceImpl(); try{ List<WebUser> userNames=webuserservice.getWebUserList(); System.out.println(userNames); //这之上的是写的从数据库调取的语句 String userName=request.getParameter("userName"); String result=null; if(userNames.contains(userName) ){ result="<font color='red'>该用户已存在</font>"; } else{ result="<font color='green'>该用户不存在</font>"; } System.out.println("sdf"); response.setContentType("text/html ; charset=UTF-8"); response.setCharacterEncoding("UTF-8"); response.getWriter().print(result); } catch(Exception ex){ System.out.println(ex); } } } ``` ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="${pageContext.request.contextPath }/scripts/jquery-1.7.2.js "></script> <script type="text/javascript"> $(function(){ $(":input[name='username']").change(function(){ var val=$(this).val(); val=$.trim(val); if(val!=" "){ var url="${pageContext.request.contextPath }/valiateUserName"; var args={"userName":val,"time":new Date()}; $.post(url,args,function(data){ $("#message").html(data); }); } }); }) </script> </head> <body> <form action="" method="post"> UserName:<input type="text" name="username" /> <div id="message"></div> <input type="submit" value="Submit" /> </form> </body> </html> ```
spring boot返回json数据,在html通过ajax请求不能获取数据
1.这是我的controller代码 ``` @RestController public class ComputeController { private final Logger logger = Logger.getLogger(getClass()); @RequestMapping(value = "/test", method = RequestMethod.GET) public List<String> test() { ServiceInstance instance = client.getLocalServiceInstance(); List<String> list = new ArrayList<>(); list.add("hello"); list.add("world"); logger.info("/test test" + instance.getHost() + ",service_id:" + instance.getServiceId() + ",result:" + list.toString()); return list; } } ``` 2.这里是我的html ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>INDEX</title> <script src="jquery-1.8.0.min.js"></script> <script> $(document).ready(function () { $("#btn").click(function () { alert("start"); $.get("http://localhost:4444/add?a=12&b=3", function (data) { $("div").html(data); }); alert("end"); }); }); </script> </head> <body> <h2>INDEX</h2> <button id="btn">ajax</button> <div id="div"></div> </body> </html> ``` 问题:在jquery中,alert("start")和alert("end")都会正常执行,但是ajax的回调函数不能正常执行。
为什么我的ajax没有返回数据?
handleSubmit:function(){ alert("调用查询方法"); $.ajax({ url: 'https://127.0.0.1:8588/pwmm/EventSearch/getfinishedList', type: 'post', data: { area: this.area, building: this.building, starttime: this.starttime, endtime: this.endtime, pageNum:0, pageSize:10 }, async: false, dataType: 'json', success: function (data) { if (data.type == 'success') { alert("成功"); } }, error:function(){ alert("失败"); } 在页面运行的时候,直接返回了失败 POST https://127.0.0.1:8588/EventSearch/getfinishedList net::ERR_CERT_COMMON_NAME_INVALID send @ jquery-2.2.3.min.js:4 ajax @ jquery-2.2.3.min.js:4 handleSubmit @ finishedEvent.js:124 click @ VM2802:3 He @ vue.min.js:6 n @ vue.min.js:6 He @ vue.min.js:6 e.$emit @ vue.min.js:6 handleClickLink @ button.vue:107 He @ vue.min.js:6 n @ vue.min.js:6 Yr.o._wrapper @ vue.min.js:6 这个是报错信息 @RequestMapping("/getfinishedList") @ResponseBody public PageVue getfinishedList(Integer pageNum,Integer pageSize,String other){ String area="" ; String building=""; String starttime=""; String endtime=""; System.out.println("area="+area+" building="+building+" starttime="+starttime+" endtime="+endtime); PageVue page=new PageVue(); List eventList=eventsearchService.getfinishedEvent(area,building,starttime,endtime); List elist=new ArrayList(); int pagetotal=pageNum+pageSize; for(int i=pageNum;i<pagetotal;i++){ if(i<eventList.size()){ elist.add(eventList.get(i)); } } page.setType("success"); page.setCount(eventList.size()); /*page.setPageNum(1); page.setPageSize(10);*/ page.setList(elist); return page; } 这个是后台代码
使用ajax返回json格式中文乱码
![图片说明](https://img-ask.csdn.net/upload/202003/15/1584276203_845239.png) 1. Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("brandList", list); PrintWriter out = response.getWriter(); out.print(new Gson().toJson(paramMap)); out.flush(); out.close(); ``` ``` 2.$.ajax({ url: "BrandServlet", type: 'post', dataType: 'json', data: {}, success: function (data) { $.each(data.brandList, function (i, n) { if ($('#brandinfo').val() != n.id) { var str = '<option value="' + n.id + '">' + n.brandName + '</option>'; $('#brandinfo').append(str); } }) } }) 3.
springmvc后台如何接收ajax传的json格式的数据,以及json数据采用哪种方式传到后台
我现在遇到一个难题,以前,我用ajax传输数据到后台,后台用springmvc接收,成功了,但是,那个时候,我用的ajax的data部分是{"dcCode":dcCode,"itemNo":itemNo...},这样,我是一个参数,一个参数输入的,虽然慢,但是,还是成功地传输了。现在,我遇到的问题是,很多的参数,需要用遍历的方法来传参,我用jsonstr拼接json字符串的方法,拼出了以下的json格式,{"dcCode":"22","itemNo":"3456",...,"sectionName":"食品课"},....,可能有几百条这样的{}, 然后,我创建了一个数组var values=new Array, 用push把这些jsonstr都放进去,最后,我用ajax的dataType:json,post方法把这些数据传到后台,可是,后台是springmvc,@RequestBody(value="/save",method="post"), 可是,当我用String[] values来接收传过来的json参数的时候,却总是null,不知道到底是怎么回事儿,请教大家,都是用什么样的方法来处理这样传输多条json数据到后台的?如果我的思路是对的,能否把这个代码正确的告诉我?如果有更好的方法,请回答。非常感谢。 为了更好的说明问题,我把代码贴出来,如下 ``` function submit(){ debugger; var n=$("#countnumber").text(); var i=0; for(var a=0;a<n;a++){ var saveData=new Array(); var arr1=$('.item p').find('input:text'); var arr2=$('.item p').find('input:checkbox'); for(i=0;i<arr1.length;i++){ saveData.push((arr1).eq(i).val()); }; for(var j=0;j<arr2.length;j++){ saveData.push((arr2).eq(j).val()); }; }; function User(userId,userName,userPwd,memo,addDate,modifyDate,addUserId){ this.userId=saveData[1]; this.userName=saveData[2]; this.userPwd=saveData[3]; this.memo=saveData[4]; this.addDate=saveData[5]; this.modifyDate=saveData[6]; this.addUserId=saveData[7]; }; var user=new User(); var users=new Array(); users.push(user); $.ajax({ type: "post",//数据发送的方式(post 或者 get) url: "insert.do",//要发送的后台地址 data: {"user":JSON.stringify(users)}, dataType: "text",//后台处理后返回的数据格式 success:function (data){ alert(jQuery.parseJSON(data).msg); } }); } ``` 以上是前台的,接下去是后台的 ``` @ResponseBody @RequestMapping(value = "/insert.do", method = RequestMethod.POST) public Map insertUsers(HttpServletRequest request, @RequestBody String users) throws Exception{ users=URLDecoder.decode(users, "utf-8"); ObjectMapper mapper = new ObjectMapper(); //这里用了jackson,自己看看代码,很简洁的 JavaType javaType=mapper.getTypeFactory().constructParametricType(List.class,User.class); List<User> list = mapper.readValue(users, javaType); String msg=userService.insertUsers(list); Map map = new HashMap(); map.put("msg", msg); return map; } ``` 然后,后台的效果截图如下 ![图片说明](https://img-ask.csdn.net/upload/201612/18/1482061394_446729.png) 传到后台的Controller的,数据显示如下 ![图片说明](https://img-ask.csdn.net/upload/201612/18/1482061427_169271.png) 然后,进一步调试,出现错误如下 ![图片说明](https://img-ask.csdn.net/upload/201612/18/1482061332_952640.png) 请问,这个错误到底是什么原因造成的。是500错误。请高手帮助啊!
JQ的Ajax向Servlet发送josn数据和回传的数据问题
问题: 1、sevlet中获取不到正确的参数值 2、sevlet回传的json值也获取不到 html中: ``` <input type="submit" id="login" value="登录" onclick="checkLogin();return false;"> ``` js中: ``` $.ajax({ type : "post", dataType : 'application/json', url : "./servlet/login.action", data : JSON.stringify(GetJsonData()), success : function(data) { var dataObj = data.person, con = ""; $.each(dataObj, function(index, item) { console.log(item.name); //1、这里没有结果 }); } }); } function GetJsonData() { var perjson = { "name" : $("#name").val(), "psw" : $("#psw").val() }; return perjson; } ``` 另外我在network中查看数据:{"name":"sa","psw":"sa"}: 这里后面有一个冒号,不知道是不是原因,也不知道从哪里来的 User类: package com.junzhang.myblog.entity; public class User { private int id; private String name; private String psw; public User(){ } public User(int id, String name, String psw) { this.id = id; this.name = name; this.psw = psw; } public User(String name, String psw) { this.name = name; this.psw = psw; } public int getId() { return id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPsw() { return psw; } public void setPsw(String psw) { this.psw = psw; } @Override public String toString() { // TODO Auto-generated method stub return super.toString(); } } servlet中: ``` public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("application/json"); PrintWriter out = response.getWriter(); System.out.println("enter"); String name = request.getParameter("name"); String psw = request.getParameter("psw"); System.out.println("name:" + name); //2、null,这里获取不到 System.out.println("psw:" + psw); //null,这里获取不到 // JSON对象 response.setContentType("application/json"); response.setContentType("text/xml;character=utf-8"); response.setHeader("Cache-Control", "no-cache"); try { User p = new User("小张", "123456"); User p1 = new User("小王", "123"); List<User> list = new ArrayList<User>(); list.add(p); list.add(p1); JSONArray json = JSONArray.fromObject(list); JSONObject jb = new JSONObject(); jb.put("person", json); out.write(jb.toString()); //这里利用的第三方net.sf.json.JSONObject,但是回去的json数据,ff浏览器说是不良好的格式 } catch (Exception e) { e.printStackTrace(); } out.flush(); out.close(); } ```
spring boot返回json数据,在html页面通过ajax异步请求取不到数据
1.这是我的controller ``` @RestController public class ComputeController { private final Logger logger = Logger.getLogger(getClass()); @RequestMapping(value = "/test", method = RequestMethod.GET) public List<String> test() { ServiceInstance instance = client.getLocalServiceInstance(); List<String> list = new ArrayList<>(); list.add("hello"); list.add("world"); logger.info("/test test" + instance.getHost() + ",service_id:" + instance.getServiceId() + ",result:" + list.toString()); return list; } ``` 2.这是我的html ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>INDEX</title> <script src="jquery-1.8.0.min.js"></script> <script> $(document).ready(function () { $("#btn").click(function () { alert("start"); $.get("http://localhost:4444/add?a=12&b=3", function (data) { $("div").html(data); }); alert("end"); }); }); </script> </head> <body> <h2>INDEX</h2> <button id="btn">ajax</button> <div id="div"></div> </body> </html> ``` 问题:alert("start")和alert("end")都会执行,ajax的回调函数不能执行。
ssm中 controller 如何接收ajax传来的string 数组?
![图片说明](https://img-ask.csdn.net/upload/201711/01/1509522145_371661.png) 以上是我前端获取到的数值 @RequestMapping("deleteByInfoPanelIds") @ResponseBody public JsonResult deleteByInfoPanelIds(@Param("deviceId") String[] s){ System.out.println(s); //infoPanelService.deleteInfoPanelByIds(list); return new JsonResult(); } 以上是我controller 的写法。各种方法都试过了,目前这么写s的值为null。。悬赏求解,在线等
struts2 和 jquery.ajax交互时候,传递list的一些问题;
<pre name="code" class="java">这是struts.xml配置 &lt;action name="userInfo" class="userInfo" &gt; &lt;result name="managementIndex" type="json"&gt; /WEB-INF/test.jsp &lt;/result&gt; &lt;/action&gt; </pre> <p> </p> <pre name="code" class="java">这是action public class UserInfoAction extends BaseAction { private String result; public String list() { UserInfo user = new UserInfo(); user.setAddress("北京"); user.setPhone("123"); List list = new ArrayList(); list.add(user); JSONArray json = JSONArray.fromObject(user); result = json.toString(); return "SUCESS"; } }</pre> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p>以下是jsp里的代码, 用的jquery</p> <p> </p> <pre name="code" class="js">$(document).ready( function() { var params = "aaa"; $("#change").click( function() { $.ajax({ url:'userInfo_list.action', type:'post', dataType:'json', data:params, success:callbackF }); }); }); function callbackF(data){ var info = eval("("+data+")"); 。。。。请问这里往下怎么解析????怎么一直解析不出来 }</pre> <p> </p> <p> </p> <p>以上是代码部分,  后台传递过来一个list , list里面有若干User类,  回调函数里,怎么把这个list完全取出来呢???   for循环吗?  我试过了  解析不出来, 求指点,要代码的。</p> <p> </p>
ajax一直不进入success:function()总是提示获取不到数据
public class UserDaoImpl implements UserDao { @Override public User login(User user) { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = BaseDao.getCon(); String sql = "select * from user where name=? and password=?"; ps = con.prepareStatement(sql); ps.setString(1, user.getName()); ps.setString(2, user.getPassword()); rs = ps.executeQuery(); User users; if (rs.next()) { users = new User(); System.out.println(); users.setId(rs.getInt("id")); users.setName(rs.getString("name")); users.setPassword(rs.getString("password")); users.setEmail(rs.getString("email")); users.setPhone(rs.getString("phone")); users.setMoney(rs.getString("money")); return users; } else { return null; } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override public boolean register(User user) { String sql = "insert into user values(0,?,?,?,?,?) "; List<Object> list = new ArrayList<Object>(); list.add(user.getName()); list.add(user.getPassword()); list.add(user.getEmail()); list.add(user.getPhone()); list.add(user.getMoney()); boolean flag = BaseDao.addUpdateDelete(sql, list.toArray()); if (flag) { return true; } else { return false; } } public ArrayList<User> query() { Connection con = null; ArrayList<User> barArr = new ArrayList<User>(); try { con = BaseDao.getCon(); PreparedStatement stmt = con.prepareStatement("select * from user"); ResultSet rs = stmt.executeQuery(); while (rs.next()) { User bar = new User(); bar.setName(rs.getString("name")); bar.setMoney(rs.getString("money")); barArr.add(bar); } con.close(); } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return barArr; } } @WebServlet("/user/userlogin") public class UserLoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { User user = new User(); // 获取login.jsp页面提交的账号和密码 String name = request.getParameter("name"); String password = request.getParameter("password"); String money=request.getParameter("money"); // 测试数据 System.out.println(name + " " + password+" "+money); // 获取login.jsp页面提交的账号和密码设置到实体类User? user.setName(name); user.setPassword(password); HttpSession session = request.getSession(); // 引入数据交互层 UserDao dao = new UserDaoImpl(); User us = dao.login(user); // 测试返回的值 System.out.println(us); if (us != null) { session.setAttribute("user", user); request.getRequestDispatcher("/index/echarts.jsp").forward(request, response); // request.setAttribute("info", "登录成功"); } else { request.setAttribute("info", "登录失败"); request.getRequestDispatcher("/index/info.jsp").forward(request, response); } UserDaoImpl barDao = new UserDaoImpl(); ArrayList<User> barArr = barDao.query(); response.setContentType("text/html; charset=utf-8"); JSONArray json = JSONArray.fromObject(barArr); System.out.println("得到的数据:"+json.toString()); PrintWriter writer = response.getWriter(); writer.println(json); writer.flush(); writer.close(); } } public class BaseDao { private static String driver; private static String url; private static String user; private static String password; private static String money; static { driver = ResourceBundle.getBundle("db").getString("driver"); url = ResourceBundle.getBundle("db").getString("url"); user = ResourceBundle.getBundle("db").getString("user"); password = ResourceBundle.getBundle("db").getString("password"); } public static Connection getCon() throws ClassNotFoundException, SQLException { Class.forName(driver); System.out.println("测试加载数据库成功"); Connection con = DriverManager.getConnection(url, user, password); System.out.println("测试数据库连接成功"); return con; } public static void close(Connection con, PreparedStatement ps, ResultSet rs) { if (rs != null) {// 关闭 try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (ps != null) { try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (con != null) { try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static boolean addUpdateDelete(String sql, Object[] arr) { Connection con = null; PreparedStatement ps = null; try { con = BaseDao.getCon();// 第一步 :连接数据库的操作 ps = con.prepareStatement(sql);// 第二步:预编译 // 第三步:设置值 if (arr != null && arr.length != 0) { for (int i = 0; i < arr.length; i++) { ps.setObject(i + 1, arr[i]); } } int count = ps.executeUpdate();// 第四步:执行sql语句 if (count > 0) { return true; } else { return false; } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } } <%@page import="org.apache.catalina.connector.Request"%> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Hello ECharts</title> <!-- 使用单文件引入的方式使用ECharts.JS --> <script type="text/javascript" src="../scripts/echarts-all.js"></script> <script type="text/javascript" src="../scripts/jquery.js"></script> </head> <body> 您的用户名是: ${user.name} <div id="myDiv" style="height: 400px"></div> <script type="text/javascript"> function loadData(option) { $.ajax({ type : 'post', //传输类型 async : false, url : 'bar.do', //web.xml中注册的Servlet的url-pattern data : { "name" : name }, dataType : 'json', //返回数据形式为json success : function(result) { if (result) { option.legend.data = []; option.series[0].data = []; for (var i = 0; i < result.length; i++) { alert(result[i].name + "---" + result[i].money); option.legend.data.push(result[i].name); option.series[0].data.push({ name : result[i].name, value : result[i].money }); } myChart.setOption(option); } }, error : function(errorMsg) { alert("加载数据失败"+errorMsg); } });//AJAX }//loadData() var myChart = echarts.init(document.getElementById('myDiv')); var option = { title : { text : '某站点用户访问来源', subtext : '纯属虚构', x : 'center' }, tooltip : { trigger : 'item', formatter : "{a} {b} : {c} ({d}%)" }, legend : { orient : 'vertical', left : 'left', data : [] }, series : [ { name : '访问来源', type : 'pie', radius : '55%', center : [ '50%', '60%' ], data : [], itemStyle : { emphasis : { shadowBlur : 10, shadowOffsetX : 0, shadowColor : 'rgba(0, 0, 0, 0.5)' } } } ] }; //加载数据到option loadData(option); //设置option </script> </body>
ajax异步请求数据问题。。。看不出哪里错了。。。跪求大神指点。。。
我做ajax读取Excel表格里的数据。。。 **这是JAVA代码** java: ``` public static List<HashMap<Object,Object>> readExcel(String excelPath){ //声明一个集合用于存储解析出来的数据 List<HashMap<Object,Object>> maps = new ArrayList<HashMap<Object,Object>>(); //导入模板文件 String execelFile="D:\\MyEclipse 10\\Workspaces\\import\\WebRoot\\course.xls"; Workbook book =null; try { // 创建文件输入流 InputStream is = new FileInputStream(execelFile); // 获取Excel文件对象 book = Workbook.getWorkbook(is); // 获取制定的工作表,默认第一个 Sheet sheet = book.getSheet(0); // 获取行 int rows = sheet.getRows(); // 获取列 int cols = sheet.getColumns(); // 循环迭代内容 for(int i=0; i<rows; i++){ // 从第二行读取 i+=1; Cell[] cells= sheet.getRow(i); /*String title = cells[0].getContents(); String desc = cells[1].getContents(); System.out.println("行:"+(i+1)); System.out.println("tetle:"+title); System.out.println("desc:"+desc);*/ HashMap<Object,Object> map = new HashMap<Object,Object>(); map.put("tetle", cells[0].getContents()); map.put("desc", cells[1].getContents()); maps.add(map); } System.out.println(maps); } catch (Exception e) { e.printStackTrace(); System.out.println("文件导入异常!"); }finally{ if(book !=null){ book.close(); } } return maps; ``` 这是数据显示的页面: import.jsp ``` <%@page import="org.apache.struts2.json.JSONUtil"%> <%@ page language="java" import="java.util.*, com.yiyun.util.*" pageEncoding="utf-8"%> <% List<HashMap<Object,Object>> lists =importUtil.readExcel(null); out.print(JSONUtil.serialize(lists)); %> ``` 这是ajax异步请求数据显示页面: ajax.jsp ``` <html> <head> <meta http-equiv="Contrnt-Type" content="text/html"; charset="utf-8"> <title>大数据批量导入</title> <meta name="Keywords" content="关键词,关键词"> <meta name="description" content=""> <style type="text/css"> *{ margin:0;padding:0;} body{font-size:12px;font-family:"微软雅黑";color:#666;} .qq{width:800px;height:500px; margin: 70px auto; } .qq h1{font-size:24px;text-align:center;} .qq .upload{width:120px;height:36px;background:#0099cc;display:block;line-height:36px; text-align:center;color:#fff;text-decoration:none;margin:30px 0;border-radius:12px; font-size:16px;} .qq .upload:hover{background:#0094f7;} .qq .con{width:800px;height:500px;border-top:1px solid #a5a5a5; border-bottom:1px solid #6c6c6c;} .qq .con .list p{font-size:14px;line-height: 46px;} .qq .con .list{margin: 20px 0;} .qq .con .list:hover{background:#d8d8d8} </style> </head> <body> <div class="qq"> <h1>大数据批量导入</h1> <a href="#" class="upload">上传批量数据</a> <div class="con"> </div> </div> <script type="text/javascript" src="js/jquery-1.11.1.min.js"></script> <script type="text/javascript"> $(function(){ alert(1); $(".upload").click(function(){ alert(2); $.ajax({ type:"post", url:"index.jsp", seccess:function(data){ var jdata = eval("("+data+")"); var html = ""; for(var i=0; i<jdata.length; i++){ html+="<div class='list'>"+ "<p>第"+(i+1)+"课名称"+jdata[i].title+"</p>"+ "<p>描述"+jdata[i].desc+"</p>"+ "</div>"; } $(".con").html(html); }, error:function(e){ alert("错误:"+e); } }); }); }); </script> </body> </html> ``` 点击上传批量数据时。。。数据没从Excel表中读取出来。。。这是为什么??请大神赐教
通过鼠标点击使用ajax获取table其中一行tr的数据传入action
这个是前端,通过ajax获取团建单位和团检登记时间传到后台action接收,查询到的东西返回页面,通过for in打印到页面<tbody>里,现在的问题就是怎么再通ajax获取到刚才打印出来的数据, (鼠标点击打印出来表格的其中一行获取这行的数据并发送到action)就这步的代码我不会…… 需求: 我第一次靠两个参数查询出数据,显示在一个table中,接下来我需要鼠标点击这个table中的tr,以这个tr中的td,查询出另外的数据显示在另一个table,我现在是不会用鼠标点击取得第一次打印出的行的数据 ``` <body> <div> <table class="table"> <tr> <th>团建单位:</th> <td><input type="text" id="comname"></td> <th>团检登记时间:</th> <td><input type="date" id="date"></td> <th><input class="button button-silver" type="button" id="query_comname" value="查询" style="width:40%;"> </td> <th><input class="button button-silver" type="button" value="退选中" style="width:40%;"></th> </tr> </table> </div> <div id="itemRefundDiv1"> <table class="table" id="tab1000"> <thead> <tr> <th class="box"><input type="checkbox" style="zoom:170%;"></th> <th>体检人</th> <th>体检号</th> <th>登记时间</th> <th>开始体检时间</th> </tr> </thead> <tbody> <!-- 打印第一个BOX的内容 --> </tbody> </table> </div> <div id="itemRefundDiv2"> <table border="1px" class="table"> <tr> <td class="box"><input type="checkbox" style="zoom:170%;"></td> <th>套餐或项目名称</th> <th>数量</th> <th>金额</th> <th>登记人</th> <th>登记时间</th> </tr> </table> </div> <script type="text/javascript"> $(function() { $("#query_comname").click(function() { var cn = $("#comname").val(); var dt = $("#date").val(); $.ajax({ url : "itemRefund/query_com", type : "post", data : { "com_name" : cn, "reg_time" : dt }, success : function(data) { if (data.NOTFOUND == "true") { alert("找不到合符条件的信息"); } else { //alert(data.listRefund[0].emp_name); var listRefund = data.listRefund; var str = ""; for (var i in data.listRefund) { str += "<tr id =" + "listRefund" + i + ">"; str += "<td class='box'>" + "<input type='checkbox' style='zoom:170%;'>" + "</td>"; str += "<td align='center' id=A" + data.listRefund[i].emp_name + ">" + data.listRefund[i].emp_name + "</td>"; str += "<td align='center' id=B" + data.listRefund[i].reg_no + ">" + data.listRefund[i].reg_no + "</td>"; str += "<td align='center' id=C" + data.listRefund[i].reg_time + ">" + data.listRefund[i].reg_time + "</td>"; str += "<td align='center' id=D" + data.listRefund[i].bat_begin + ">" + data.listRefund[i].bat_begin + "</td>"; str += "</tr>"; } $("#tab1000 tbody").empty(); $("#tab1000 tbody").append(str); } } }); }); }); </script> </body> ``` 下面是action类 ``` @Controller @RequestMapping("itemRefund") public class itemRefundAction { @Autowired IItemRefundService iitemRefundService; @RequestMapping(value="query_com",method=RequestMethod.POST) @ResponseBody public Map<String, Object> query(itemRefund it){ System.out.println("查询公司" + it); //通过团检单位和团检登记时间查询内容用来退项 List<itemRefund> list = iitemRefundService.queryRefund(it); Map<String, Object> map = new HashMap<String, Object>(); if(!list.isEmpty()){ map.put("NOTFOUND", "false"); map.put("listRefund", list); }else{ map.put("NOTFOUND", "true"); } System.out.println("map="+map); return map; } @RequestMapping(value="query_Refund",method=RequestMethod.POST) @ResponseBody public Map<String, Object> queryRefund(itemRefund it){ System.out.println("收到的数值"); //这里接收第二次发送的数据 Map<String, Object> map = new HashMap<String, Object>(); return map; } } ```
Ext.Ajax.request做文件上传不执行回调函数?
我在做一个多文件上传,整体用的EXT,所以想用EXT的异步请求完成上传,上传没问题,就是上传完了,不执行回调函数,老自动弹一个下载"uploadFile.action"文件,其实就是一个json,好像是根本没执行回调函数,求各位老鸟解释下,并帮我解决,我不想别人上传完,总提示下载"uploadFile.action"。 页面代码: [code="java"] <form id="uploadForm" action="uploadFile.action"> <table border="0" cellspacing="1" class="fu_list"> <thead> <tr> <td colspan="2"><b>上传附件</b></td> </tr> </thead> <tbody> <tr> <td align="right" width="15%" style="line-height:35px;">添加附件:</td> <td><a href="javascript:void(0);" class="files" id="idFile"></a> <img id="idProcess" style="display:none;" src="../../images/upload/loading.gif" /></td> </tr> <tr id="fileList" style="display: none"> <td colspan="2"><table border="0" cellspacing="0"> <thead> <tr> <td>文件路径</td> <td width="100"></td> </tr> </thead> <tbody id="idFileList" name="idFileList"> </tbody> </table></td> </tr> <tr> <td colspan="2" style="color:gray">温馨提示:最多可同时上传 <b id="idLimit"></b> 个文件,只允许上传 <b id="idExt"></b> 文件。 </td> </tr> <tr id="uploadButton" style="display: none"> <td colspan="2" align="center" id="idMsg"><input type="button" value="开始上传" id="idBtnupload" disabled="disabled" /> &nbsp;&nbsp;&nbsp; <input type="button" value="全部取消" id="idBtndel" disabled="disabled" /> </td> </tr> </tbody> </table> </form> <SCRIPT type="text/javascript"> //以下为附件js代码 var isIE = (document.all) ? true : false; var $ = function (id) { return "string" == typeof id ? document.getElementById(id) : id; }; var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } } var Bind = function(object, fun) { return function() { return fun.apply(object, arguments); } } var Each = function(list, fun){ for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); } }; //提交操作 function doUpload(){ if(Efs.getExt("uploadForm").isValid()){ myMask.show(); Ext.Ajax.request({ //请求地址 url: 'uploadFile.action', //提交参数组 fileUpload: true, form: uploadForm, scope: uploadForm, //成功时回调 success: function(response, options) { //获取响应的json字符串 myMask.hide(); var json = response.responseText; var o= Ext.util.JSON.decode(json); // var s="<s:text name="o.msg"/>"; var s=o.msg; Ext.Msg.alert('<s:text name="msg_title"/>', s); }, failure: function (response,options){ myMask.hide(); var st='<s:text name="'+o.msg+'"/>'; Ext.Msg.alert('<s:text name="msg_title"/>', st); } }); } else Ext.Msg.alert('<s:text name="msg_title"/>', '<s:text name="msg_mustFill"/>'); } //文件上传 var FileUpload = Class.create(); FileUpload.prototype = { //表单对象,文件控件存放空间 initialize: function(form, folder, options) { this.Form = $(form);//表单 this.Folder = $(folder);//文件控件存放空间 this.Files = [];//文件集合 this.SetOptions(options); this.FileName = this.options.FileName; this._FrameName = this.options.FrameName; this.Limit = this.options.Limit; this.Distinct = !!this.options.Distinct; this.ExtIn = this.options.ExtIn; this.ExtOut = this.options.ExtOut; this.onIniFile = this.options.onIniFile; this.onEmpty = this.options.onEmpty; this.onNotExtIn = this.options.onNotExtIn; this.onExtOut = this.options.onExtOut; this.onLimite = this.options.onLimite; this.onSame = this.options.onSame; this.onFail = this.options.onFail; this.onIni = this.options.onIni; if(!this._FrameName){ //为每个实例创建不同的iframe this._FrameName = "uploadFrame_" + Math.floor(Math.random() * 1000); //ie不能修改iframe的name var oFrame = isIE ? document.createElement("<iframe name=\"" + this._FrameName + "\">") : document.createElement("iframe"); //为ff设置name oFrame.name = this._FrameName; oFrame.style.display = "none"; //在ie文档未加载完用appendChild会报错 document.body.insertBefore(oFrame, document.body.childNodes[0]); } //设置form属性,关键是target要指向iframe this.Form.target = this._FrameName; this.Form.method = "post"; //注意ie的form没有enctype属性,要用encoding this.Form.encoding = "multipart/form-data"; //整理一次 this.Ini(); }, //设置默认属性 SetOptions: function(options) { this.options = {//默认值 FileName: "files",//文件上传控件的name,配合后台使用 FrameName: "",//iframe的name,要自定义iframe的话这里设置name onIniFile: function(){},//整理文件时执行(其中参数是file对象) onEmpty: function(){},//文件空值时执行 Limit: 0,//文件数限制,0为不限制 onLimite: function(){},//超过文件数限制时执行 Distinct: true,//是否不允许相同文件 onSame: function(){},//有相同文件时执行 ExtIn: [],//允许后缀名 onNotExtIn: function(){},//不是允许后缀名时执行 ExtOut: [],//禁止后缀名,当设置了ExtIn则ExtOut无效 onExtOut: function(){},//是禁止后缀名时执行 onFail: function(){},//文件不通过检测时执行(其中参数是file对象) onIni: function(){}//重置时执行 }; Extend(this.options, options || {}); }, //整理空间 Ini: function() { //整理文件集合 this.Files = []; //整理文件空间,把有值的file放入文件集合 Each(this.Folder.getElementsByTagName("input"), Bind(this, function(o){ if(o.type == "file"){ o.value && this.Files.push(o); this.onIniFile(o); } })) //插入一个新的file var file = document.createElement("input"); file.name = this.FileName; file.type = "file"; file.onchange = Bind(this, function(){ this.Check(file); this.Ini(); }); this.Folder.appendChild(file); //执行附加程序 this.onIni(); //添加附件成功,显示列表 if(this.Files.length>0){ document.getElementById('fileList').style.display=""; document.getElementById('uploadButton').style.display=""; } }, //检测file对象 Check: function(file) { //检测变量 var bCheck = true; //空值、文件数限制、后缀名、相同文件检测 if(!file.value){ bCheck = false; this.onEmpty(); } else if(this.Limit && this.Files.length >= this.Limit){ bCheck = false; this.onLimite(); } else if(!!this.ExtIn.length && !RegExp("\.(" + this.ExtIn.join("|") + ")$", "i").test(file.value)){ //检测是否允许后缀名 bCheck = false; this.onNotExtIn(); } else if(!!this.ExtOut.length && RegExp("\.(" + this.ExtOut.join("|") + ")$", "i").test(file.value)) { //检测是否禁止后缀名 bCheck = false; this.onExtOut(); } else if(!!this.Distinct) { Each(this.Files, function(o){ if(o.value == file.value){ bCheck = false; } }) if(!bCheck){ this.onSame(); } } //没有通过检测 !bCheck && this.onFail(file); }, //删除指定file Delete: function(file) { //移除指定file this.Folder.removeChild(file); this.Ini(); if(this.Folder.getElementsByTagName("input").length==1){//没有附件时隐藏 document.getElementById('fileList').style.display="none"; document.getElementById('uploadButton').style.display="none"; } }, //删除全部file Clear: function() { //清空文件空间 Each(this.Files, Bind(this, function(o){ this.Folder.removeChild(o); })); this.Ini(); document.getElementById('fileList').style.display="none";//清空同样隐藏 document.getElementById('uploadButton').style.display="none"; } } var fu = new FileUpload("uploadForm", "idFile", { Limit: 3, ExtIn: [], onIniFile: function(file){ file.value ? file.style.display = "none" : this.Folder.removeChild(file); }, onEmpty: function(){ alert("请选择一个文件"); }, onLimite: function(){ alert("超过上传限制"); }, onSame: function(){ alert("已经有相同文件"); }, // ExtIn: ["jpg", "gif"] 可以限制上传文件后缀名,不写即为所有 // onNotExtIn: function(){ alert("只允许上传" + this.ExtIn.join(",") + "文件"); }, onFail: function(file){ this.Folder.removeChild(file); }, onIni: function(){ //显示文件列表 var arrRows = []; if(this.Files.length){ var oThis = this; Each(this.Files, function(o){ var a = document.createElement("a"); a.innerHTML = "取消"; a.href = "javascript:void(0);"; a.onclick = function(){ oThis.Delete(o); return false; }; arrRows.push([o.value, a]); }); } else { arrRows.push(["<font color='gray'>没有添加文件</font>", "&nbsp;"]); } AddList(arrRows); //设置按钮 //$("idBtnupload").disabled = $("idBtndel").disabled = this.Files.length <= 0; } }); $("idBtnupload").onclick = function(){ //显示文件列表 var arrRows = []; Each(fu.Files, function(o){ arrRows.push([o.value, "&nbsp;"]); }); AddList(arrRows); fu.Folder.style.display = "none"; $("idProcess").style.display = ""; $("idMsg").innerHTML = "正在添加文件到您的网盘中,请稍候……<br />有可能因为网络问题,出现程序长时间无响应,请点击“<a href='?'><font color='red'>取消</font></a>”重新上传文件"; doUpload(); $("idProcess").style.display = "none"; //fu.Form.submit(); } //用来添加文件列表的函数 function AddList(rows){ //根据数组来添加列表 var FileList = $("idFileList"), oFragment = document.createDocumentFragment(); //用文档碎片保存列表 Each(rows, function(cells){ var row = document.createElement("tr"); Each(cells, function(o){ var cell = document.createElement("td"); if(typeof o == "string"){ cell.innerHTML = o; }else{ cell.appendChild(o); } row.appendChild(cell); }); oFragment.appendChild(row); }) //ie的table不支持innerHTML所以这样清空table while(FileList.hasChildNodes()){ FileList.removeChild(FileList.firstChild); } FileList.appendChild(oFragment); } $("idLimit").innerHTML = fu.Limit; $("idExt").innerHTML = fu.ExtIn.join(","); $("idBtndel").onclick = function(){ fu.Clear(); } //在后台通过window.parent来访问主页面的函数 //function Finish(msg){ alert(msg); location.href = location.href; } <SCRIPT> [/code] struts配置文件(用的插件自动生成json): [code="java"] <action name="*File" method="{1}" class="com.web.action.UploadFile"> <result type="json" name="success"> <param name="includeProperties">msg</param> <param name="excludeNullProperties">true</param> </result> <result type="json" name="error"> <param name="includeProperties">msg</param> <param name="excludeNullProperties">true</param> </result> </action> [/code] 后台UploadFile.java的代码 [code="java"] package com.web.action; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.common.pojo.AppUser; import com.opensymphony.xwork2.ActionContext; /** * 负责文件的上传 */ public class UploadFile { private File[] files; private String[] filesFileName; private Map<String, String> filesPath;// 文件名及其上传后路径 private String msg; public String upload() { /* * Map session=ActionContext.getContext().getSession(); AppUser * user=(AppUser) session.get("user"); if(user==null){ return "error"; } */ msg="上传成功!"; for (int i = 0; i < files.length; i++) { fileCopy(files[i], filesFileName[i]); } return "success"; } private void fileCopy(File file, String fileName) { BufferedInputStream bis = null; BufferedOutputStream bos = null; String realPath = ServletActionContext. getServletContext().getRealPath("/upload/" + fileName); System.out.println(realPath); try { bis = new BufferedInputStream(new FileInputStream(file)); bos = new BufferedOutputStream(new FileOutputStream(new File( realPath))); byte[] buffer = new byte[1024 * 8]; int i = -1; while ((i = bis.read(buffer)) != -1) { bos.write(buffer,0,i); } bos.flush(); } catch (Exception e) { System.out.println("上传异常!"); msg="上传出错!"; e.printStackTrace(); }finally{ try { if (bis != null) bis.close(); if (bos != null) bos.close(); } catch (IOException e1) { System.out.println("上传结束异常!"); e1.printStackTrace(); } } } public File[] getFiles() { return files; } public void setFiles(File[] files) { this.files = files; } public String[] getFilesFileName() { return filesFileName; } public void setFilesFileName(String[] filesFileName) { this.filesFileName = filesFileName; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } } [/code]
AJAX值传递到后台的诡异问题
我的问题是前台数据封装成formdata数据类型后,通过AJAX传值到后台springmvc方式,竟然带有,的值被分成了2个值,?????代码如下,有没有遇到过的,以下为测试代码,写代码这么多年,还是头一次见这样的 ``` var formData = new FormData(); var arar = new Array(); arar.push('a/b/c,a.xml') arar.push('a/b/d.xml') formData.append('testList', arar) $.ajax({ data: formData, type: "POST", url: url, async: true, cache: false, contentType: false, processData: false, success: function (msg) { window.parent.document.getElementById('coverbehidepage').style.display = "none"; var dataa = eval(msg) var i = 0; if (dataa[0].isSameFileUploadFolderName != 'OK') { alert(dataa[0].isSameFileUploadFolderName); flaggg = false; clearUploder() return flaggg; } else { if (url == "/fileupdown/checkmessagefolder") { newUrlArray = dataa[0].allPath; if (newUrlArray.length > 0) { updateFilePathBeforeSave(filePathName); } } flaggg = true; return flaggg; } }, error: function (msg) { window.parent.document.getElementById('coverbehidepage').style.display = "none"; alert("查询失败"); flaggg = false; clearUploder() return flaggg; } }); 后台不论是list还是string[]类型接收,带有,的值都被打断成了2个值 ,如上面两个值传到后台就是以下三个值 a/b/c a.xml a/b/d.xml ```
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
【资源】一个C/C++开发工程师的学习路线(已经无路可退,唯有逆风飞翔)【内附资源页】
声明: 1)该文章整理自网上的大牛和专家无私奉献的资料,具体引用的资料请看参考文献。 2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。 3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。 4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
神级宝库!GitHub 标星 1.2w+,Chrome 最天秀的插件都在这里啦!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个沉迷 Chrome 不能自拔的蒟蒻… 作为一个在远古时代用过什么 IE、360、猎豹等浏览器的资深器哥,当我第一次了解 Chrome 的时候,就被它的美貌给吸引住了… 就在我用了一段时间之后,我坚决的卸载了电脑上其它碍眼的浏览器,并觉得在之前的搬砖生涯中,我不配当哥,我只配是个沙雕… ...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
张朝阳回应迟到 1 分钟罚 500:资本家就得剥削员工
loonggg读完需要2分钟速读仅需 1 分钟大家我,我是你们的校长。前几天,搜狐的董事局主席兼 CEO 张朝阳和搜狐都上热搜了。原因很简单,就是搜狐出了“考勤新规”。一封搜狐对员工发布...
立即提问