关于ajax中发送不到servlet的问题

最近在学ajax,看到教材的这个案例,然后就是实现搜索框文本框输入提示的问题,然后就在js中那个display的函数中就直接执行alert语句,在servlet中加了一个输出语句,然后发现send函数也发送不到servlet有没有大佬知道这个怎么整啊,求

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>search Suggest</title>
<script type="text/javascript" src="/ElJstlAjax/js/ajax.js"></script>
<script type="text/javascript">

    var trSrc;
    function search() {
        var inputWord = document.getElementById("inputWord").value;
        if(inputWord ==""){
            clearDivData();
             return;
          }
        var url = "SearchSuggest";
        var params = "inputWord="+inputWord;
        sendRequest(url,params,"POST",display);
    }

    function display() {
        //alert(httpRequest.readyState+" "+httpRequest.status);
        if(httpRequest.readyState == 4){
            if(httpRequest.status == 200){
                var xmlDoc = httpRequest.responseXML;
                clearDivData();
                changeDivData(xmlDoc);
            }else{
                alert("您请求的界面有异常!");
            }
        }
    }

    // 清除下拉框中的数据
    function clearDivData(){
        var tbody = document.getElementById("wordsListTbody");
        var trs = tbody.getElementsByTagName("tr");
        for(var i=trs.length-1;i>0;i--){
            tbody.removeChild(trs[i]);
        }
    }

    // 设置用户选中条目的背景色
    function setBgColor() {
        if(trSrc){
            trSrc.style.backgroundColor = "white";
        }
        trSrc = event.srcElement;
        trSrc.style.backgroundColor = "gray";
    }


    // 将用户选中的条目显示在文本框中
    function setText(){
        alert("setText");
        document.getElementById("inputWorld").value = trSrc.firstChild.data;
        document.getElementById("wordsListDiv").style.visibility = "hidden";
    }

    // 实际将数据加入下拉提示框
    function changeDivData(xmlDoc) {
        alert("changeDiv");
        var words = xmlDoc.getElementsByTagName("word");
        var tbody = document.getElementById("wordsListTbody");
        for(i=0;i<words.length;i++){
            var newTr = document.createElement("tr");
            var newCell = document.createElement("td");
            var wordText = words[i].firstChild.data;
            var textNode = document.createTextNode(wordText);
            newCell.onmouseover = setBgColor;
            newCell.onclick = setText;
            newCell.appendChild(textNode);
            newTr.append(newCell);
            tbody.appendChild(newTr);
        }
        if(words.length>0){
            document.getElementById("wordsListDiv").style.visibility = 'visible';
        }else{
            document.getElementById("wordsListDiv").style.visibility = 'hidden';
        }
    }

    //设置下拉提示框的位置
    function setDivPosition() {
        var input = document.getElementById("inputWord");
        var listdiv = document.getElementById("wordsListDiv");
        listdiv.style.left = (input.offsetLeft)+"px";
        listdiv.style.border = "blue 1px solid";
        listdiv.style.top = (input.offsetTop+input.offsetHeight)+"px";
        listdiv.style.width = (input.offsetWidth)+"px";
    }


</script>
</head>
<body onload="setDivPosition()">
<p>搜索字符串:<input type="text" id="inputWord" onkeyup="search()"></p>
<div id="wordsListDiv" style="position:absolute;visibility:hidden">
    <table id="worksListTable">
        <tbody id="wordsListTbody"><tr><td>test</td></tr></tbody>
    </table>
</div>

</body>
</html>

下面一个实例就能正常运行

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>表单验证</title>
<script type="text/javascript" src="js/ajax.js"></script>
<script type="text/javascript">
    function formcheck() {
        var url = "FormCheck";
        var params = "userid="+userid.value+"&userpwd="+userpwd.value;
        sendRequest(url,params,"POST",showresult);
    }
    function showresult() {
        if(httpRequest.readyState == 4){
            if(httpRequest.status == 200){
                var info =httpRequest.responseText;
                result.innerHTML=info;
            }
        }
    }
</script>
</head>
<body>
<div id="inp">
请输入用户名:<input type="text" name="userid" onblur="formcheck()"><br>
请输入密码:<input type="password" name=userpwd><br>
<input type="button" value="登陆" onclick="formcheck()">
</div>
<div id="result"></div>
</body>
</html>

图片说明

1个回答

display() 回调的 Alert 是否执行了呢?F12 打开浏览器的开发者模式看看 js 请求是否报错了,URL 路径响应状态码是多少。

wojiushiwo945you
毕小宝 回复微风丶a_Sen: 响应码 404 ,检查 Servlet 有每有配置映射路径,路径是否正确?
4 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复微风丶a_Sen: 加下咱们的群 4129094
4 个月之前 回复
qq_43066253
微风丶a_Sen 回复毕小宝: 目录结构在上面,我觉得没问题啊
4 个月之前 回复
qq_43066253
微风丶a_Sen 回复毕小宝: 我用的注解,然后在浏览器的时候f12报404
4 个月之前 回复
qq_43066253
微风丶a_Sen 回复毕小宝: 我用的注解,然后在浏览器的时候发2
4 个月之前 回复
qq_43066253
微风丶a_Sen 回复毕小宝: 是servlet有问题
4 个月之前 回复
wojiushiwo945you
毕小宝 回复微风丶a_Sen: 响应码不应该变化的,只有 readyState 会经历几个不同阶段的。打出的 status 响应码是多少
4 个月之前 回复
qq_43066253
微风丶a_Sen display回调的时候alert执行了,然后display中注解掉的alert语句输出的码一直在变化
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于ajax连接servlet的问题
最近开始学习ajax,看的是《ajax基础教程》一书。 书中一个测试代码,在html页面中使用ajax连接servlet发送参数,返回一些数据。 但是始终出错,显示404,找不到servlet文件。 我是在myEclipse中部署的,书中在NetBeans中部署,所以下载的代码不能直接使用。 我复制了html文件,重新生成了servlet,复制代码进去。 不知道操作上有没有什么错误?
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(); } ```
关于ajax发送几次请求后不再发送的问题
本人今天在跟视频做小项目,遇到一个比较棘手的问题贴出来希望大神能解答。 关于一个商城商品分类列表的目录问题, 这是前端发送的ajax请求,目的是获取数据库中的分类列表,回调函数是处理ul列表 ```<script type="text/javascript"> $(function(){ var content = ""; $.post( "${pageContext.request.contextPath}/categoryList", function(data){ for(var i=0;i<data.length;i++){ content += "<li><a href='#'>"+data[i].cname+"</a></li>"; } $("#category").html(content); }, "json" ); }); </script> ``` `` Jedis jedis = JedisPoolUtils.getJedis(); String list = jedis.get("category_list"); //判断是否为空 if(list == null){ //查询mysql数据库 ProductService service = new ProductService(); List<Category> list_category = null; try { list_category = service.findCategoryList(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } //将获得的结果转化为json格式 Gson gson = new Gson(); list = gson.toJson(list_category); //将数据写入redis jedis.set("category_list", list); } //将数据返回前台(注意转换编码) response.setContentType("text/html;charset=utf-8"); response.getWriter().write(list); ``` 这是后端对于请求的处理,service和dao不再贴了,验证后没有问题,如代码所示,是先查找redis数据库中有无信息,再决定是否去mysql中查找, 第一次运行成功 如图![图片说明](https://img-ask.csdn.net/upload/201709/01/1504248552_91216.png) 刷新网页八次后![图片说明](https://img-ask.csdn.net/upload/201709/01/1504248591_140319.png) 打断点发现每到第八次以后,页面都不再发送ajax请求,导致写入列表的数据为空,与cookie无关,与浏览器版本无关,(已经尝试过)可能与redis数据库有关??不知道求大神解答,在后端打的断点第八次以后就会跳过。。。说明ajax请求第八次以后就到不了servlet了。。。
$.ajax()+servlet登陆的问题,我真的很想弄懂它
# html ``` <input type="text" name="username" id="username"/>**用户名输入框** <input type="button" class="buttontype2" id="login" value="登录" onclick="checkUser();" />**这是一个登陆按钮,触发checkUser()方法** ``` # js: ``` function checkUser(){ var username = $("#username").val(); var password = $("#password").val(); $.ajax({ type: "post", url: "logincheck", data: "username"+username+"password"+password, success: function(data){ username = "<%=Session("username")%>"; alert(username); } }); } **js部分,因为我才刚刚接触!弄不懂,我只知道,这个$.ajax()方法会向服务器提交username和password,然后servlet与数据库进行处理** # servlet request.setCharacterEncoding("utf-8"); response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String un = request.getParameter("username"); String pd = request.getParameter("password"); userCheck uc = new userCheck(); String res = uc.getUser(un,pd); if(!res.equals("userwrong") && !res.equals("passwordwrong")) { request.getSession().setAttribute("username", res); } ``` **获得的验证的username保存到session中** 大神能不能和我详细说一下$.ajax()这个方法,怎么发送数据到服务器,还有怎么在这个方法里取回服务器的数据(username)
ajax一次请求,多次响应的问题
大家好,小弟有个小问题,想请教下大家。。 前台ajax提交请求之后,后台用Servlet响应请求。本来最简单的,一次请求,后台一次性返回所有内容,这个过程就结束了。 现在后台的处理比较多,耗时较长,得到的数据有快有慢,先后写入到PrintWriter中的。 为了不让页面等待太久,现在想把先写入到PrintWriter中的数据返回到页面上去,后面得到的数据在按照顺序追加到展示的页面中。。 请问,这个怎么实现比较好? 看了网上的一些办法,有个是通过ajax轮询去处理,定时发送请求从后台取值,值是写入到数据库或者文件中,方便读取。。但是目前我不想把数据存到数据库里面去,有什么办法从PrintWriter对象中获取已经有的数据吗? 先谢过大家了~
jsp与servlet如何交互
jsp向servlet发送请求,servlet处理将请求包含的数据存储到数据库,怎么实现? 用action调用servlet会导致页面跳转或者刷新啊,但我不想页面跳转也不想让页面刷新,仅仅是发送请求到servlet,然后由响应的servlet处理请求。不用ajax!谢谢
xmlHttp.open("GET",url,true);执行以后既不报错,也没有访问到servlet,这是为什么?
首先下面是获取XMLHttpRequest对象的方法,应该是没有问题的。 ``` //获得的XmlHttp对象的函数 function createXmlHttp(){ //对大对数浏览器适用 var xmlHttp; if(window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); } //考虑到浏览器的兼容性问题 if(window.ActiveXObject){ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); if(!xmlHttp){//如果还是没有获取到采用另一种方法 xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } } return xmlHttp; } ``` 下面是获取到XMLHttpRequest对象并调用open()方法传递参数给servlet。 调用以后就是没反应,不报错,servlet也没有被执行。 如果直接在浏览器上访问该servlet是可以的,这说明我的web.xml配置应该也是正确的,servlet也没有问题。想不出哪里还会出现问题了,希望这个问题能得到解决 ``` var xmlHttp; function getMoreContents(){ //首先获取用户的输入 var content = document.getElementById("keyword"); if(content.value == ""){ return; } //给服务器发送用户输入的内容,因为采用的是ajax异步发送 //所以需要使用一个对象,XmlHttpRequest对象 xmlHttp = createXmlHttp(); //要给服务器发送数据 var url = "search?keyword="+escape(content.value);//escape防止中文输入问题 //true表示异步 xmlHttp.open("get",url,true);//get请求方式不需要内容体,url为要访问的servlet的路径 ```
ajax如何实现页面跳转
当我用AJAX像服务器发送一个登录请求后,服务器验证数据是否正确,是则跳到另一个 页面,否则返回一个数据错误的信息给AJAX,页面不刷新。 当验证正确时我用的是servlet的 request.getRequestDispatcher("../index.jsp").forward(request, response);跳转方式 错误就直接out.print();可是不管怎样都是跳到了那个请求页面 请问要怎样才能跳到另一个页面,还能带着数据过去 ajax代码 //声明XMLHttpRequest对象 var xmlrequest; //初始化XMLHttpRequest function createXMLHttpRequest(){ if(window.XMLHttpRequest){ xmlrequest = new XMLHttpRequest(); }else if(window.ActiveXObject){ try{ xmlrequest = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ xmlrequest = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ } } } } //定义回调函数 function processResponse(){ //响应完成 if(xmlrequest.readyState == 4){ //响应正常 if(xmlrequest.status == 200){ var head = xmlrequest.responseText; alert(head); } } } servlet代码 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("post被触发了"); request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); String account = request.getParameter("account"); String password = request.getParameter("password"); if (account == "admin" & password == "admin"){ request.getRequestDispatcher("../index.jsp").forward(request, response); }else{ PrintWriter out = response.getWriter(); out.print("错误"); }
服务器(servlet类)接不到数据,不知道是不是URL请求地址没写对
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*" %> <!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>ajax请求响应方式</title> <script language=JavaScript type=text/JavaScript> var XMLHttpReq=false; //创建XMLHttpRequest对象 function createXMLHttpRequest(){ if(window.XMLHttpRequest){ XMLHttpReq = new XMLHttpRequest(); if(XMLHttpReq.overrideMimetype) { XMLHttpReq.overrideMimeType('text/xml'); } }else{ if(window.ActiveXObject) try{ XMLHttpReq = new ActiveXObject("Msxm12.XMLHTTP"); }catch(e){ try{ XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ } } } } //处理服务器响应结果 function handleResponse(){ //判断对象状态 if(XMLHttpReq.readystate ==2){ //信息已经成功返回,开始处理信息 alert("d"); if(XMLHttpReq.status == 200){ alert("a"); var out=""; var res =XMLHttpReq.responseXML; var response = res.getElementsByTagName("response")[0].firstchild.nodeVaule; document.getElementById("hello").innerHTML=response; } alert("c"); }else{ alert("b"); } } //发送客户端的请求 function sendRequest(url){ createXMLHttpRequest() var url='/a'; XMLHttpReq.open("post",url,true); //响应指定函数 XMLHttpReq.onreadystatechange=handleResponse; //发送请求 XMLHttpReq.send(null); } //开始调用Ajax的功能 function sayHello(){ var name=document.getElementById("name").value; //发送请求 sendRequest("SayHello?name="+name); } </script> </head> <body> <font size="1">姓名:<input type="text" id="name" > <input type="button" value="提交" onclick="sayHello()" > <div id="hello"></div> </font> </body> </html> -------------------------------------------------------接下来是servlet处理数据代码 package servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class sayHello */ @WebServlet("/a") public class ajaxTest extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ajaxTest() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //处理收到的参数,生成响应的XML文档 } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); response.setContentType("text/xml;charset = GB2312"); response.setHeader("Cache-control","no-cache"); PrintWriter out = response.getWriter(); out.print("wewq"); } }
html+js+servlet 前端接收不到结果
html ``` <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Js</title> </head> <body> <input type="text" id="param1" /> <input type="text" id="param2" /> <button onclick="ajax()">Go!</button> </body> </html> <script> function createXMLHttpRequest() { var XMLHttpRequest1; if (window.XMLHttpRequest) { XMLHttpRequest1 = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { XMLHttpRequest1 = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { XMLHttpRequest1 = new ActiveXObject("Microsoft.XMLHTTP"); } } return XMLHttpRequest1; } function ajax() { //param1与param2就是用户在输入框的两个参数 var param1=document.getElementById("param1").value; var param2=document.getElementById("param2").value; var XMLHttpRequest1 = createXMLHttpRequest(); //指明相应页面 var url = "http://192.168.0.111:8080/AjaxServer/Test"; XMLHttpRequest1.open("POST", url, true); //这里没法解释,你所有JavaScript的请求头都这样写就对了,不会乱码 XMLHttpRequest1.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //对于ajaxRequest,本js.html将会传递param1与param2给你。 XMLHttpRequest1.send("param1=" + param1 + "&param2=" + param2); //对于返回结果怎么处理的问题 XMLHttpRequest1.onreadystatechange = function() { //这个4代表已经发送完毕之后 if (XMLHttpRequest1.readyState == 4) { //200代表正确收到了返回结果 if (XMLHttpRequest1.status == 0) { //弹出返回结果 alert(XMLHttpRequest1.responseText); } else { //如果不能正常接受结果,你肯定是断网,或者我的服务器关掉了。 alert("网络连接中断!"); } } }; } </script> ``` servlet: ``` /** * Servlet implementation class Test */ @WebServlet("/Test") public class Test extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Test() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html; charset=utf-8"); PrintWriter pw = response.getWriter(); request.setCharacterEncoding("utf-8"); String param1=request.getParameter("param1"); System.out.println("param1="+param1); String param2=request.getParameter("param2"); System.out.println(",param2="+param2); pw.print("param1="+param1+",param2="+param2); pw.flush(); pw.close(); } } ``` 前段发送的请求servlet收到了,并且处理了,可是前段接收到结果总是为空,并且XMLHttpRequest1.status==0,求问哪里出了问题
难了,有关ajax的执行问题
今天在jsp页面中这样执行了一个js,在这个js中把数据发送给servlet,可是遇到了一个很奇怪的问题: 在jsp页面中的代码是这样的: 1.<a href="javascript:void(0);" onclick="clearResum()">clearResum</a> 但是js中的clearResum()函数不执行,这个函数的主要功能是把数据发送到后台给servelt处理,也就是没有把数据发送给serlvet。 但是如果改成: 2.<a href=“#" onclick="clearResum()">clearResum</a>,则xmlHttpRequest.status的返回值始终是0,我已经把项目成功发布了,所以应该不存在tomcat的配置问题。 3.如果把 1 中的代码换成 <a href="javascript:clearResum()">clearResum</a>,这个js也始终不执行,而把clearResum()函数换成一个简单的test()函数( 这个函数只有一条alert("") )就可以执行。 4.在 1 中,如果把<a href=“#" onclick="clearResum()">clearResum</a>中的onclick="clearResum()"中的clearResum()函数换成一个简单的test()函数( 这个函数只有一条alert("") )就可以执行。 问题:被搞的很糊涂,非常不理解上述四点描述的问题,特别是第 1 点和第 3点,clearResum()为什么始终不执行,而第 4 点执行后得到的xmlHttpRequest.status的值始终是0?希望哪位兄弟帮忙解答一下,本人感激不尽,先谢谢了!! [b]问题补充:[/b] 谢谢 ham: clearResum() { send("clearResum?p=1"); } send()的方法体主要是建立xmlHttpRequest对象并发送数据和调用handleResponse方法处理服务器的返回信息。 还有,您能不能解释下<a href=" " onclick=" ">中href 和onclick执行js的区别,谢谢关注! [b]问题补充:[/b] 嗯,好,谢谢 ham 的解释,回头我再仔细检查和测试下function send()部分.
Ajax异步处理跳转不了
这是第一个jsp页面的代码,可以正常进入AjaxServlet ``` var xmlHttpRequest=null; //页面加载 window.onload=function(){ //获取按钮对象 var but=document.getElementById("login"); but.onclick=function(){ //处理ajax //对浏览器判断 if (window.ActiveXOject) { //IE xmlHttpRequest=new ActiveXOject(Microsoft.XMLHTTP); }else{ xmlHttpRequest=new XMLHttpRequest(); } //获取内容 var loginname=document.getElementById("loginname").value; var upassword=document.getElementById("upassword").value; var inputRand=document.getElementById("inputRand").value; //打开链接 xmlHttpRequest.open("get","AjaxServlet?loginname="+loginname+"&upassword="+upassword+"&inputRand="+inputRand+"&type=1"+"&random="+new Date().getTime(),true); //回调函数 xmlHttpRequest.onreadystatechange=AjaxCallBack; //发送 xmlHttpRequest.send(null); } }; //创建回调函数 function AjaxCallBack(){ if (xmlHttpRequest.readyState==4) { if (xmlHttpRequest.status==200) { //读取后台回传的数据 var content=xmlHttpRequest.responseText; var divObject=document.getElementById("resultdiv"); divObject.innerHTML=content; if (content=="登录成功") { window.location.href="index.jsp"; } } } } ``` 这是第二个jsp页面的代码,执行之后没有进入后台AjaxServlet,路径是没有错的 而且不光是进不了AjaxServlet,把URL改成随便的一个JSP页面或者Servlet也跳不过去 ``` var xmlHttpRequest=null; //页面加载 window.onload=function(){ //获取按钮对象 var but=document.getElementById("OK"); but.onclick=function(){ //处理ajax //对浏览器判断 if (window.ActiveXOject) { //IE xmlHttpRequest=new ActiveXOject(Microsoft.XMLHTTP); }else{ xmlHttpRequest=new XMLHttpRequest(); } //获取内容 var oldpassword=document.getElementById("oldpassword").value; var newpassword=document.getElementById("newpassword").value; var renewpassword=document.getElementById("renewpassword").value; //打开链接 //alert("执行到这里"); xmlHttpRequest.open("get","../../AjaxServlet?oldpassword="+oldpassword+"&newpassword="+newpassword+"&renewpassword="+renewpassword+"&type=2",true); //回调函数 xmlHttpRequest.onreadystatechange=AjaxCallBack; //发送 xmlHttpRequest.send(null); } }; //创建回调函数 function AjaxCallBack(){ if (xmlHttpRequest.readyState==4) { if (xmlHttpRequest.status==200) { //读取后台回传的数据 var content=xmlHttpRequest.responseText; var divObject=document.getElementById("resultdiv"); divObject.innerHTML=content; } } } ``` 我是初学者,如果是写法不对,想请教一下怎样在一个项目里面的多个JSP页面实现异步处理
SpringMVC+JQuery ajax 总会跳转到一个输出返回值json页面
``` 前台代码 <script type="text/javascript"> function saveShopping(){ var tsid =[] $("input[name='tsid']:checked").each(function(){ tsid.push($(this).val()); if(tsid.length==0){ alert("你没有选择任何图书"); } }); alert(tsid); var url ="${pageContext.request.contextPath}/savaShopping?tsid="+tsid; if(tsid!=null){ alert(url); $.ajax({ url:url, type:"post", dataType:"json", async:false, beforeSend:function(data){ alert("发送成功"); }, success:function(data){ alert(data.msg); }, error:function(){ alert("出现错误"); } } ); }else{ alert("请选择购买的书籍") } } </script> 后台controler //放入购物车 @RequestMapping(value="savaShopping") @ResponseBody public Map saveShopping(@RequestParam String[] tsid){ for (int i = 0; i < tsid.length; i++) { long date1 = new Date().getTime(); BC_shopping shopping = new BC_shopping(); shopping.setS_date(date1); shopping.setS_num(1); shopping.setS_b_id(Integer.parseInt(tsid[i])); shoppingService.insertShopping(shopping); } Map<String, String> map = new HashMap<String, String>(); map.put("msg", "加入购物车成功"); return map; } 配置文件 <!-- 使spring扫描包下的所有类,让标注spring注解的类生效 --> <context:component-scan base-package="com.bk"/> <mvc:annotation-driven></mvc:annotation-driven> <!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 访问静态资源 --> <mvc:resources location="/css/" mapping="/css/**"></mvc:resources> <mvc:resources location="/images/" mapping="/images/**"></mvc:resources> <mvc:resources location="/js/" mapping="/js/**"></mvc:resources> <!-- 完成请求和注解POJO的映射 --> <!--springmvc 3.1之前的配置 --> <!-- <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="jsonConverter"/> </list> </property> </bean> --> <!--springmvc 3.1之后的配置 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" p:ignoreDefaultModelOnRedirect="true" > <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> </list> </property> </bean> ajax能 success 能接受到 返回的map之后 就跳转到下面的页面 图片上传不成功:就是在页面展示出map的json格式,就是在页面有一句 {"msg":"加入购物车成功"}
struts2+ajax登录问题
action中: public String execute() throws Exception { User u=userService.findUserByNameAndPassword(user); try { u.setStudentCourseInfoList(null); u.setTeacherCourseInfoList(null); user.setId(u.getId()); return String.valueOf(u.getType()); /*return SUCCESS;*/ } catch (NullPointerException e) { //json.fromObject("用户名密码错误,请重新登录!"); //this.message="错误"; JSONObject jsob = new JSONObject(); jsob.put("success", "用户名密码错误或不存在"); json = JSONObject.fromObject(jsob); return ERROR; } } 配置文件中: <action name="loginPro" class="com.lb.action.UserAction"> <result name="1">/jsp/teacher/teacher.jsp</result> <result name="2">/jsp/student/student.jsp</result> <result name="0">/jsp/admin/admin.jsp</result> <!-- <result name="error">/jsp/login/fail.jsp</result> <result type="json" name="error"> <param name="root">json</param> </result>--> </action> 页面中: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>用户登录界面</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/icon.css"> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/color.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap/css/bootstrap.min.css"> <script src="${pageContext.request.contextPath}/jquery/jquery-2.1.3.min.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/easyui/jquery.easyui.min.js"></script> <script src="${pageContext.request.contextPath}/bootstrap/js/bootstrap.min.js"></script> <style type="text/css"> .myBackground { background: url("${pageContext.request.contextPath}/picture/background.jpg") no-repeat; background-position: 50px 50px; } .myInstitute { background: url("${pageContext.request.contextPath}/picture/logo.jpg") no-repeat; } .myBackgroundColor { background-color: #fff; } </style> </head> <body class="easyui-layout"> <div data-options="region:'north',split:false" style="height: 100px" class="myInstitute myBackgroundColor"></div> <div data-options="region:'center',split:false" style="width: 800px" class="myBackground"> <div style="margin-top: 30px; margin-left: 250px;"> <h2 style="font-size: 40px; color: grey;">学生信息管理系统</h2> <h4 style="font-size: 15px; color: grey; margin-left: 100px; margin-top: 30px;">——光山县第二高级中学</h4> </div> <div style="margin-top: -10px; margin-left: 800px;"> <form id="loginForm" method="post" style="border-left: #CCC 2px solid"> <div style="margin: 20px; margin-left: 50px;"> <input type="text" name="user.username" class="form-control" id="inputUsername" placeholder="用户名" style="width: 250px;"> </div> <div style="margin: 20px; margin-left: 50px;"> <input type="password" name="user.password" class="form-control" id="inputPassword" placeholder="密码" style="width: 250px;"> </div> <div style="margin: 20px; margin-left: 50px;"> <button id="login" type="submit" class="btn btn-default" style="width: 250px;">登录</button> </div> </form> </div> </div> <script type="text/javascript"> function loginHandle() { $.ajax({ //url:g_contextPath+'/servlet/LoginHandleServlet', url:'loginPro.action', //url表示服务器端处理用户登录的URL地址 //data表示要提交到服务器端的数据,更加简洁的写法 data: $('#loginForm').serialize(), //serialize()方法的作用是将form表单中的内容序列化成字符串 dataType: 'json', type:'post', success: function(data) { var dataObj=eval(data); $.messager.alert('提示',dataObj.success,'error'); } }); }; $("#loginForm").keydown(function(e){ if(e.keyCode == 13){ loginHandle(); } }); $(function(){ $('#login').click(function() { //var params=$('input').serialize(); //将input元素序列化,返回JSON数据格式 $.ajax({ type: 'post', //请求方式为post方式 url: 'login.action', //请求地址 dataType: 'json', //服务器返回类型为JSON类型 data:$('#loginForm').serialize(), //发送到服务器的数据 success:function(data){ //请求成功后的回调函数 var dataObj=eval(data); $.messager.alert('提示',dataObj.success,'error'); } }); }); }) </script> </body> </html> 问题:学生 老师 管理员都在一个用户表,用类型区分,用户登录判断用户名和密码,判断用户类型 跳转对应页面,如果用户名或密码错误,弹出错误消息
如何在servlet里提取别人直接传过来的url里带中文和#的地址?
别人调用我们提供的MsgManager.do这个servlet来向我们传递数据,地址格式如下: /MsgManager.do?user=aa&password=aa&txflag=1&tel=13618668888&sendtime=2009-06-17#14:33:47&msg=306测试 请教一下如何能在MsgManager.do这个servlet里提取这个地址并进行分析,从而获取里面的参数 关键是里面带的有#号和中文 我们整个网站都用的编码过滤器,统一的“utf-8” 只要能提取这个地址的方法就可以,分析的工作我们可以做,我现在用request.getQueryString()和request.getHeader("Referer")都提不出这个地址,何解? 谢谢 [b]问题补充:[/b] 里面的测试代码: msg=request.getParameter("msg"); tel=request.getParameter("tel"); txflag=request.getParameter("txflag"); sendtime=request.getParameter("sendtime"); System.out.println(msg); System.out.println(tel); System.out.println(txflag); System.out.println(sendtime); 得到的结果: null 13618668888 1 2009-06-17 我如果这样传(去掉#号): /MsgManager.do?user=aa&password=aa&txflag=1&tel=13618668888&sendtime=2009-06-1714:33:47&msg=306测试 得到: null[color=red]--------------msg还是为空[/color] 13618668888 1 2009-06-1714:33:47 如果去掉(#号和中文): /MsgManager.do?user=aa&password=aa&txflag=1&tel=13618668888&sendtime=2009-06-1714:33:47&msg=306 得到: 306 13618667017 1 2009-06-1714:33:47 [b]问题补充:[/b] 至于peday朋友说的,我也分析过,没有自己想要的数据: Enumeration names=request.getHeaderNames(); while(names.hasMoreElements()) { String tt=(String)names.nextElement(); System.out.println(request.getHeader(tt); } 结果为: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */ zh-cn x86 gzip, deflate Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) localhost:8080 Keep-Alive cnzz_a1385362=3; vw1385362=%3A13428861%3A26446058%3A29578610%3A; sin1385362=http%3A//localhost%3A8080/; rtime=3; ltime=1245372363718; cnzz_eid=86227953-1245110629-http%3A//localhost%3A8081/; user_detail=1-E10ADC3949BA59ABBE56E057F20F883E; JSESSIONID=a4XOF87Ktvu59Xwd2h [b]问题补充:[/b] 我本来建议他们对传递过来的数据格式改动一下,他们那边说“我们对所有的人”都是提供这样的格式,然我们自己解决,唉,没办法,请大家看看 [b]问题补充:[/b] 我们提供的地址他们是远程调用的,调用的过程中我们还要在MsgManager.do里给他们返回一个状态(0:成功 1:失败)。 [b]问题补充:[/b] [color=darkred]to:lovewhzlq [/color] System.out.println(request.getQueryString()); 我也实验过,但是得到的数据从#号那就断了,郁闷 这是结果: user=aa&password=aa&txflag=1&tel=13618668888&sendtime=2009-06-17 [b]问题补充:[/b] 我刚想了个办法,就是新建一个中转的jsp文件,然后让这个文件用js对地址进行分析,然后再传给MsgManager.do: <%@ page contentType="text/html;charset=utf-8" language="java" %> <script type="text/javascript"> function jumpUrl() { var the_url=location.href; var p=the_url.indexOf("msg="); var temp; if(p!=-1) { temp=the_url.substring(0,p)+"msg="+escape(the_url.substring(p+4)); } var que_str=temp.substring(temp.indexOf("?")); que_str=que_str.replace("#","-"); //alert("/MsgManager.do"+que_str); location.href="/MsgManager.do"+que_str; } jumpUrl(); </script> 但是这样我就不知道他们远程那能否调用到我在MsgManager.do中返回的值?这个方法写了,但是还没有和他们沟通,我直接用ajax调用了一下,得不到值,出现了远程调用的权限问题 [b]问题补充:[/b] [quote] 那用这个方法 public ServletInputStream getInputStream() 得到这个流,读取出来解析 lovewhzlq (资深架构师) [/quote] 这个方法还没有实验,过会再上来提交结果,谢谢你的关注 [b]问题补充:[/b] 我实验两种方法,好像都取不出值,ContentLength得到的是-1,是我写的代码有问题,还是别的原因?request.getInputStream()好像应该在form提交的时候设置enctype="multipart/form-data"的时候才有用吧,我记得我以前写上传控件的时候用到过这个方法 第一种: [code="java"]System.out.println("内容长度为:"+request.getContentLength()); BufferedReader in=request.getReader(); String temp; while((temp=in.readLine())!=null) { System.out.println(temp+"########"); } in.close();[/code] 第二种: [code="java"]System.out.println("内容长度为:"+request.getContentLength()); byte[] buffer = new byte[1024]; ServletInputStream in=request.getInputStream(); String temp=""; int flag=0; while((flag=in.readLine(buffer,flag,1024))!=-1) { temp=temp+new String(buffer,"utf-8"); System.out.println(temp+"########"); } in.close();[/code] [b]问题补充:[/b] public Enumeration getHeaders(String name)不论我name传哪个头都无法得到完整的url,关键是他们在地址里面还加了个#号,#号在地址中也是一个特殊符号,指向锚点用的,我都晕了,getQueryString()又无法得到#号以后的数据。 他们地址也不编码,还说别人都用的好好的,就我们这有问题。 别的语言我没接触过,但是我这是已经想了很多办法了,都解决不了。 如果只是简单的出现乱码问题我都没有这么烦了,郁闷中…… [b]问题补充:[/b] 唯一能用的就是那个用中转页面调用js,然后对地址编码后再传递,不知道大家还有什么好的方法没有 [b]问题补充:[/b] 他们主要是做短信的,现在是希望我们提供一个接口,用户短信是直接发到他们平台,然后他们再调用我们提供的接口将信息转发过来,发送过来的信息格式就是以上讨论半天的那个地址,有#号和中文 我现在只能让我朋友用php或者别语言来试试,看看可以弄不。 关键是时间紧,不然我就重新找一个有开发api的服务商来合作了,没办法。
ssm 框架已经实现,但是ajax返回验证有毛病
``` <%@ 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>js+ajax</title> <script type="text/javascript" src="static/bootstrap/js/jquery-2.0.3.js"></script> <script type="text/javascript"> function validate(){ var name= $("#name").val(); if(name==null||name==""){ //为空隐藏提交按钮 var ui =document.getElementById("tijiao"); ui.style.display="none"; //这里是简单的显示 不设计后台,前台做的判断 $("#namediv").html("用户名不可以为空"); }else{ //ajax实现 //11111111获取XMLhtmlRequestxml对象 var req=createXmlHttpRequest(); //222222222准备url 数据 回调函数 //这个name是function下面var的参数. var url="/maven/reg1.do?name="+name; //还有一个参数表示的是异步还是同步,一般不写直接就是true,异步的 req.open("GET",url,true); //3333333333这个就是回调函数 req.onreadystatechange=callback; //这个send是在从servlet判断你的账号是不是存在, 如果是true就说名字存在,给页面返回了以后才有的.为啥写空不知道 //4发送请求 req.send(null); //回调函数 function callback(){ //第一个是我们的服务器成功接受了响应,并且解释了出来,状态4 第二个是服务器内部没有发生错误, url什么的也没有错, if(req.readyState=4&&req.status==200){ var date=req.responseText; if(date=="false"){ //下面的是意思是,如果账号存在了,提交按钮自动消失 //超级叼 var ui =document.getElementById("tijiao"); ui.style.display="none"; $("#namediv").html("用户名已经存在"); }else{ //不为空了,按钮一直显示 var ui =document.getElementById("tijiao"); ui.style.display=""; $("#namediv").html("用户名可以使用"); } } } } } function createXmlHttpRequest(){ //如果是ie6以上版本的浏览器 if(window.XMLHttpRequest){ return new XMLHttpRequest(); }else{ //如果浏览器是ie以下的 return new ActiveXObject("Microsoft.XMLHTTP"); } } </script> </head> <body> <form action="/maven/reg1.do" id="form1"> <table id="aa"> <tr> <td>用户名</td> <td><input type="text" name="username" id="name" onblur="validate();" />&nbsp;<font color="red">*</font></td> <td> <div id="namediv" style="display: inline"></div> </td> <td>密码</td> <td><input type="password" name="password"></td> <td>电话</td> <td><input type="text" name="phone"></td> <td><input type="submit" value="点击注册" id="tijiao"></td> </tr> </table> </form> </body> </html> ``` ``` ``` ``` package com.gray.user.controller; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import com.gray.user.entity.RegUser; import com.gray.user.service.impl.RegServiceImpl; import com.gray.user.service.impl.UserServiceImpl; @Controller public class RegController { @Autowired private RegServiceImpl userService; //自动装载他到spring @RequestMapping("/reg1.do") //url public String dologin(Model model,HttpServletResponse res,@RequestParam String username,RegUser rg,HttpServletResponse response) throws IOException{ boolean used=false; System.out.println("测试参数获取到bean没有"+rg.getUsername()+rg.getPassword()+rg.getPhone()); rg.setUsername(username); if(userService.doUserLogin(rg)){ used=true; System.out.println("通过control到--->service---到dao---到usermapp.在返回回来,service里面是ture,就是说账号不重复"); }else{ used=false; System.out.println("通过control到--->service---到dao---到usermapp.在返回回来,service里面是false,重复了账号 "); } return "regsuccess"; } } ``` ``` package com.gray.user.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.gray.user.dao.UserDao; import com.gray.user.entity.RegUser; import com.gray.user.entity.User; import com.gray.user.service.RegService; import com.gray.user.service.UserService; @Service public class RegServiceImpl implements RegService { @Autowired private UserDao<RegUser> dao; @Override public boolean doUserLogin(RegUser ruser) { //第一次执行查询数据库,查询 userdao selectUserName方法。 他这个方法和user.xml里面的id为selectUserName串联了. //也就是直接调用查询语句,并且吧值返回给reguser 类 System.out.println("testRegServiceImpl------->查询数据库,查询语句为id是selectusername"); List<RegUser> list = dao.selectUserName(ruser.getUsername()); System.out.println("查到了集合大小是"+list.size()+"查到了和你账号相同是的是几个"); if(list.size() == 0){ System.out.println("RegServiceImpl---你没有查询到你账号和数据库相同的信息.所以你return,"); for(int i=0;i<list.size();i++){ System.out.println(list.get(i).getUsername()); } return true; }else{ if(list.size()!=0){ System.out.println("regServiceImpl---查询到和你相同的账号不是0个,返回false"); return false; }else{ System.out.println("regserviceImpl----其他情况我也不知道啥情况,也返回false"); return false; } } } } ``` ``` 页面上的ajax 他就一直出毛病,数据库有个账号名是aa 只有我在表单填写aa 他才在网页提示账号重复, 别的任何都不提示,只会提示不能为空, 而且还失灵时不灵。 但是用system. 输出 我写的任何判断都是对了, 这是为啥? 请求大神给我说下,最好说下哪里错了。谢谢了
ajax_jquery
$(document).ready(function() { var wordInput = $("#word"); var wordInputOffset = wordInput.offset(); //隐藏div $("#auto").hide().css("border", "1px black solid") .css("top", wordInputOffset.top + wordInput.height() + "px") .css("left", wordInputOffset.left + "px").width(wordInput.width()); //给文本框添加键盘按下弹起的事件 $("#word").keyup(function() { //1,首先获取文本框中的内容 var wordText = $("#word").val(); //2,将文本框中的内容发送给服务器端 $.post("AutoComplete",{word:wordText},function(data){ //将dom对象data转换成JQuery对象 var jqueryObj = $(data); //找到所有的word节点 var wordNodes = jqueryObj.find("word"); var autoNode = $("#auto"); //需要清空之前的内容 autoNode.html(""); //遍历所有的word节点,取出单词内容,然后将单词内容添加到弹出框中 wordNodes.each(function(){ //获取单词内容 var wordNode = $(this); //新建div节点,将单词内容加入到新建的节点中 $("<div>").html(wordNode.text()).appendTo(autoNode); }); //如果服务器端有数据返回,则显示弹出框 if (wordNodes.length > 0) { $("#auto").show(); } },"xml"); }); $("input[type='button']").click(function(){ alert("文本框中的[" + $("#word").val() + "]已被提交了!"); }); }) 这段代码在firefox上是正常的,他有调到"AutoComplete" servlet 并通过servlet把值读出来,,, 但是用ie就不正常了,,IE也有调了"AutoComplete" servlet 就是不能把值读出来,,,,, 在IE中,程序执行到这句话 $.post("AutoComplete",{word:wordText},function(data){ 就不执行了 请问在ie中怎么改以上的代码,,先谢过
JSP搜索联想框,新手求指教。
不是用的SSH框架,DAO用JDBC,项目赶工,DAO和Service整合在了一起,我是半路插入的~各位大神先别吐槽……咱先把问题解决再美化~谢谢 页面结构如下 ``` <input name="accountName" id="accountName" class="yhgl_ser required inputElem" onkeyup="getLinkData();" value="<%StringHelper.filterHTML(out, request.getParameter("accountName"));%>" /> <div id="popup" style="position: absolute;"> <table width="100%" bgcolor="#fffafa"> <tbody id="popupBody"></tbody> </table> </div> ``` JS代码如下(借鉴了很多网上的JS方法) ``` <script type="text/javascript"> function getLinkData() { var popupDiv = document.getElementById("info");//获得对应的div对象 var popupBody = document.getElementById("popupBody");//获得对应的tbody对象 var linkDataProperty = document.getElementById("accountName"); //获得对应的输入框对象 clearModels();//清除联想输入提示框的内容 //利用ajax获取后台的模糊查询的数据,并且封装成下拉列表的形式展现出来 $.ajax({ type : "post",//提交的方法为post //对应的Action提交的路径 url : "<%configureProvider.format(out, URLVariable.SEARCH_ACCOUNT);%>", data:{linkDataProperty:linkDataProperty.value},//从前台传递到后台的查询语句的参数 dataType : "json", //从Action中返回的数据的类型为json类型的 error:function(){ alert("没有对应的数据,请查看输入的查询条件!"); }, success : function(data) {//当Ajax提交成功时调用的方法 if(data.length==0){return;} setOffsets();//设置联想输入下拉列表提示框的位置 var tr,td,text; for (var i = 0; i < data.length; i++) {//根据返回的值,手动的拼tbody的内容 text = document.createTextNode(data[i].linkDataProperty);//从Action中返回的数据中取出linkDataProperty的值 td = document.createElement("td");//创建一个td的对象 tr = document.createElement("tr");//创建一个tr的对象 td.mouseOver = function(){this.className="mouseOver;"}; td.mouseOut = function(){this.className="mouseOut;"}; td.onclick = function(){populateModel(this)};//单击td是的方法为populateModel td.appendChild(text); tr.appendChild(td); popupBody.appendChild(tr); } }}); //点击下拉列表中的某个选项时调用的方法 function populateModel(cell) { clearSelect(); linkDataProperty.value = cell.firstChild.nodeValue; //initOtherData(linkDataProperty.value);利用输入框中的数据调用其他方法,初始化其他数据 clearModels();//清除自动完成行 } //清除自动完成行,只要tbody有子节点就删除掉,并且将将外围的div的边框属性设置为不可见的 function clearModels() { while (popupBody.childNodes.length > 0) { popupBody.removeChild(popupBody.firstChild); } popupDiv.style.border = "none"; } //设置下拉列表的位置和样式 function setOffsets() { var width = linkDataProperty.offsetWidth;//获取linkDataProperty输入框的相对宽度 var left = getLeft(linkDataProperty); var top = getTop(linkDataProperty) + linkDataProperty.offsetHeight; popupDiv.style.border = "black 1px solid"; popupDiv.style.left = left + "px"; popupDiv.style.top = top + "px"; popupDiv.style.width = width + "px"; } //获取指定元素在页面中的宽度起始位置 function getLeft(e) { var offset = e.offsetLeft; if (e.offsetParent != null) { offset += getLeft(e.offsetParent); } return offset; } //获取指定元素在页面中的高度起始位置 function getTop(e) { var offset = e.offsetTop; if (e.offsetParent != null) { offset += getTop(e.offsetParent); } return offset; } } //清空输入框中的数据 function clearSelect() { var linkDataProperty=document.getElementById(linkDataProperty); linkDataProperty.value=""; } </script> ``` Servlet代码如下 ``` protected void processPost(HttpServletRequest request, HttpServletResponse response, ServiceSession serviceSession) throws Throwable { //往后传数据 System.out.println("进入servlet,将传入后台:"+request.getParameter("accountName")); //获得DAO服务 ZhglManage manage = serviceSession.getService(ZhglManage.class); //获得前台数据并往后台发送,同时接收返回的结果 String accounts = manage.searchAccountInOneResult(request.getParameter("accountName")); //往前端发送 PrintWriter out = response.getWriter(); System.out.println("返回servlet,即将返回获得的结果:"+accounts+" 给页面"); out.print(accounts); out.close(); } ``` DAO加Service代码如下: ``` public String searchAccountInOneResult(String inputing) throws Throwable { //尝试了Gson但也没成功 Gson gson = new Gson(); System.out.println("进入DAO,传入的参数是:"+inputing); //map方式 Map<String, String> rsMap = new HashMap<String,String>(); String account = ""; String key = ""; //获得连接 Connection conn = getConnection(); //准备SQL语句,获得单列账号信息 String sql = "SELECT @ROW := @ROW +1 AS ROW , t.F02 AS accountName FROM S61.T6110 t, ( SELECT @ROW :=0 )r WHERE t.F02 LIKE '"+inputing+"%' LIMIT 10"; PreparedStatement pstm = conn.prepareStatement(sql); //执行SQL ResultSet rs = pstm.executeQuery(); //获得结果 while(rs.next()){ //map方式 key = rs.getString("accountName"); account = rs.getString("accountName"); rsMap.put(key, account); } String temp = gson.toJson(rsMap); System.out.println("正在打印gson:"+temp); return temp; } ``` 然后控制台是这样的 进入servlet,将传入后台:1 进入DAO,传入的参数是:1 正在打印gson:{"12342@qq.com":"12342@qq.com","12344@qq.com":"12344@qq.com","100@qq.com":"100@qq.com"} 返回servlet,即将返回获得的结果:{"12342@qq.com":"12342@qq.com","12344@qq.com":"12344@qq.com","100@qq.com":"100@qq.com"} 给页面 firefox控制台和页面效果是这样的 ![图片说明](https://img-ask.csdn.net/upload/201505/18/1431943341_591979.png) 我对JS什么的不怎么懂,来请教下各位我哪里有问题,解决方法或者说解决思路应该是怎样的
页面直接显示了异步请求的json数据?
我在页面发送异步请求,后台对数据进行处理后返回json字符串,前台并没有进入到success或者error语句块,就直接显示了返回的json字符串。 异步请求: ``` jQuery.ajaxFileUpload({ secureuri:false, type : 'POST', url : 'web/contactsInfo/importExlSave', fileElementId : 'excelFile', dataType : 'json', data : { "projectId":${projectId} }, success : function(data) { if(data.state=='success') { toastr.success("人员导入完成!","系统消息"); $('#modal').modal('hide'); $('#tab').bootstrapTable('refresh', {url: 'web/contactsInfo/contactsInfoList?projectId=${projectId}'}); } else { toastr.error("人员导入出现异常!","系统消息"); } }, error : function(data) { toastr.error("系统发生异常!","系统消息"); } }); ``` 请求的处理方法 ``` public @ResponseBody Map<String,Object> importExlSave(MultipartFile excelFile,HttpServletRequest request,HttpServletResponse response){ String parameter = request.getParameter("projectId"); Map<String,Object> map = new HashMap<String,Object>(); map.put("state", "success"); map.put("message", "完成!"); return map; } ``` 关于将对象转成json字符串的配置 ``` <!-- 返回json格式配置开始 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 解决Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点的 json 报文 <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"> <property name="extractValueFromSingleKeyModel" value="true" /> </bean> --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list > <ref bean="mappingJacksonHttpMessageConverter" /> </list> </property> </bean> <!-- 返回json格式配置结束 --> ``` 大概就是这样。 我提交请求后得到的响应是这样的: ![图片说明](https://img-ask.csdn.net/upload/201702/28/1488266497_61268.png) 跪求大神帮助 如果觉得我给的不够详细,可以提出来,我补充
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
Android 9.0系统新特性,对刘海屏设备进行适配
其实Android 9.0系统已经是去年推出的“老”系统了,这个系统中新增了一个比较重要的特性,就是对刘海屏设备进行了支持。一直以来我也都有打算针对这个新特性好好地写一篇文章,但是为什么直到拖到了Android 10.0系统都发布了才开始写这篇文章呢?当然,一是因为我这段时间确实比较忙,今年几乎绝大部分的业余时间都放到写新书上了。但是最主要的原因并不是这个,而是因为刘海屏设备的适配存在一定的特殊性
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100) 【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问