加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ajax前后台传值小demo

发布时间:2020-12-16 00:43:06 所属栏目:百科 来源:网络整理
导读:本篇的demo总体实现了一个Ajax从前台到后台的交互的模拟功能,具体的情况是利用在前台动态以表格显示数据,每一行有一个复选框,然后利用servlet模拟在后台取出从前台传过来的主键值,其中在servlet中可以对数据进行增删改的功能,此处为模拟,并未对数据修

本篇的demo总体实现了一个Ajax从前台到后台的交互的模拟功能,具体的情况是利用在前台动态以表格显示数据,每一行有一个复选框,然后利用servlet模拟在后台取出从前台传过来的主键值,其中在servlet中可以对数据进行增删改的功能,此处为模拟,并未对数据修改,然后返回一个json数组,ajax成功执行时时跳转到另外一个页面并获得所传的值。

首先看程序运行的结果,url如下:http://localhost:8080/effective/taskExp.jsp


点击cancel按钮,跳转的url为

http://localhost:8080/effective/index.jsp?result=[9,44]


首先看web项目的目录结构


前台的taskExp.jsp的核心代码如下,利用JDBC从数据库中读取数据,然后在前台以table的方式显示数据,

 <%  
    Connection ct = null;  
    PreparedStatement ps = null;  
    ResultSet rs = null;  
    String DRIVER = "com.mysql.jdbc.Driver";  
    String URL = "jdbc:mysql://localhost:3306/test";  
    String USERNAME = "root";  
    String PASSWD = "";
    
      
    List<OrderDetail> orderDetailList = new ArrayList<OrderDetail>();   
    String doflag  = request.getParameter("doflag");  
    if(doflag==null||doflag.length()==0) {  
        try {  
            Class.forName(DRIVER);  
            ct = DriverManager.getConnection(URL,USERNAME,PASSWD);  
                String sql = "select * from orddetail";  
                ps = ct.prepareStatement(sql);  
                rs = ps.executeQuery();  
                while(rs.next()) {  
                    OrderDetail orderDetail = new OrderDetail();  
                    orderDetail.setId(rs.getInt("id"));  
                    orderDetail.setOrderId(rs.getString("orderId"));  
                    orderDetail.setName(rs.getString("name"));  
                    orderDetail.setAddress(rs.getString("address"));  
                    orderDetail.setFlag(rs.getInt("flag"));  
                    orderDetailList.add(orderDetail);  
                }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            
        }  
    } 
%>  
  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
<base target="_self">  
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="test.js"></script></head>  
<body onload="onload()">  
<center>  
    <h2>我的订单</h2>  
    <form action="ordervideo.jsp" method="post" name="save">  
        <table width="90%" border="1" cellspacing="0" cellpadding="1">  
            <tr>  
                <th><input type="checkbox" id="allid" onclick="doallcheck()"></th>  
                <th>orderId</th>  
                <th>name</th>  
                <th>address</th>  
            </tr>  
            <%  
            if(null != orderDetailList && orderDetailList.size() != 0) {  
                for(OrderDetail orderDetail : orderDetailList) {  
                    %>  
                    <tr align="center">  
                        <%  
                            if(orderDetail.getFlag() == 1) {  
                                %>  
                                    <td><input type="checkbox" name="mycheckbox" onclick="doclickcheck(this)" checked="checked" value="<%=orderDetail.getId() %>"></td>  
                                <%  
                            } else if(orderDetail.getFlag() == 0) {  
                                %>  
                                    <td><input type="checkbox" name="mycheckbox" onclick="doclickcheck(this)" value="<%=orderDetail.getId() %>"></td> 
                                     
                                <%  
                            }  
                        %>  
                        <td><%=orderDetail.getOrderId() %></td>  
                        <td><%=orderDetail.getName() %></td>  
                        <td><%=orderDetail.getAddress() %></td>  
                    </tr>  
                    <%  
                }  
            }  
            %>  
            <tr>  
                <td colspan="5" align="right"><input type="submit" value="ok"/>  
                <input type="button" id="save1" value="cancel" />  
                  
                <input type="hidden" name="doflag" value="update"/>  
            </tr>       
        </table>  
    </form>  
</center>  
</body>  
</html> 
test.js文件的核心代码如下,处理的逻辑是查看所有选中行的复选框,并且把每行选中的数据中的主键传给url为task的servlet处理,如果成功执行就跳转到index.jsp,并将后台传给前台的数据也传给index.jsp:

$(document).ready(function(){ 
	
	_postData();
	
 }); 


function _postData(){
	$("#save1").click(function(){
		var str = "";
		var ck = $("input[name='mycheckbox']:checked");
		 for(var i=0;i<ck.length;i++){
		  	if(ck[i].checked)
		  	{
		  		str+=ck[i].value+",";
		  	}
		  }
		 str = str.substring(0,str.length-1);
	$.ajax({
		url: 'task',type: 'post',//dataType: 'json',data: {name:'['+str+']'},success: function(data){
			window.location.href="index.jsp?result="+data;
		},error: function(){
			alert("error");
		}
	  });
	});
}
servlet的代码如下,接受从前台传过来的参数值,当然这当中可以解析json数组,对数据操作,然后模拟并添加了一个数据,然后又返回一个json数组

package com.servlet;



import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TaskServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request,HttpServletResponse response)
		throws ServletException,IOException {
    String name = request.getParameter("name");   
    
    String result = name.substring(0,name.length()-1)+",44]";
    request.setAttribute("result",result);
    System.out.println("before execute");
    //response.sendRedirect("index.jsp");
    //request.getRequestDispatcher("/index.jsp").forward(request,response);
    System.out.println("after execute");
   
	response.setContentType("text/plain");
	response.setCharacterEncoding("utf-8");
	PrintWriter out = response.getWriter();
	out.print(result);
	out.flush();
	out.close();

     }
}
index.jsp就非常简单了,代码如下

<%=request.getParameter("result") %>
文档所需jar包为连接mysql的驱动jar包

本次小demo遇到的一些问题

1.一开始的时候,我打算直接在servlet中跳转,无论怎样都无法跳转,不管是重定向还是转发,对应servlet中注释的代码,最后在技术群问才发现这是根本不可能的,不管你在servlet中如何跳转,相当于把返回值传$.ajax函数中的function的回调函数,不信可以尝试alert(data)你就会知道了,所以说思路就是,利用ajax传值给servlet,如果需要跳转的话,在回调函数中跳转。

2.ajax方法中的dataType的含义是返回值的类型,如果此处设置为json串,而返回的不是json串,那么会跳转到error中

3.一开始的时候其实用的并不是ajax函数,而是post函数,但是发现在post并不能对返回的success和error进行判断,从而采用的ajax这个父类的函数


ajax中的dataType属性的说明

  • dataType(default: Intelligent Guess (xml,json,script,or html))
    Type: String
    The type of data that you're expecting back from the server. If none is specified,jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML,in 1.4 JSON will yield a JavaScript object,in 1.4 script will execute the script,and anything else will be returned as a string). The available types (and the result passed as the first argument to your success callback) are:
    • "xml": Returns a XML document that can be processed via jQuery.
    • "html": Returns HTML as plain text; included script tags are evaluated when inserted in the DOM.
    • "script": Evaluates the response as JavaScript and returns it as plain text. Disables caching by appending a query string parameter,"_=[TIMESTAMP]",to the URL unless thecacheoption is set totrue.Note:This will turn POSTs into GETs for remote-domain requests.
    • "json": Evaluates the response as JSON and returns a JavaScript object. The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. As of jQuery 1.9,an empty response is also rejected; the server should return a response ofnullor{}instead. (Seejson.orgfor more information on proper JSON formatting.)
    • "jsonp": Loads in a JSON block usingJSONP. Adds an extra "?callback=?" to the end of your URL to specify the callback. Disables caching by appending a query string parameter,monospace!important">true.
    • "text": A plain text string.
    • multiple,space-separated values:As of jQuery 1.5,jQuery can convert a dataType from what it received in the Content-Type header to what you require. For example,if you want a text response to be treated as XML,use "text xml" for the dataType. You can also make a JSONP request,have it received as text,and interpreted by jQuery as XML: "jsonp text xml." Similarly,a shorthand string such as "jsonp xml" will first attempt to convert from jsonp to xml,and,failing that,convert from jsonp to text,and then from text to xml.

不知道我的解释是否正确,如果有大牛能够跟小弟指正,望不吝赐教。当然更深入的学习还是看jquery官网文档更好

如果文章有什么错误或者有什么建议,欢迎提出,大家共同交流,一起进步

文章转载请注明出处,请尊重知识产权

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读