serialize()與serializeArray()


1.了解serialize()與serializeArray()

serialize()序列化表單元素,用於ajax請求,

serializeArray()序列化表單元素,類似於serialize,但是返回的是json格式的對象,注意是對象返回的不是字符串,也可以用於ajax請求

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>FormJson</title>
<script type="text/javascript" src="../js/jquery-1.11.3.min.js"></script>
<style>
</style>
<script type="text/javascript">
    $(document).ready(function() {
        $("#get").click(function() {
            data1 = $("#myForm :text").serializeArray();
            data2 = $("#myForm").serialize();
            console.log(data1);
            console.log(JSON.stringify(data1))
            console.log(data2);
            $.each(data1, function(i, field) {
                $("#results").append(field.name + ":" + field.value + " ");
            });
        });
    });
</script>
</head>
<body>
    <form id="myForm" action="">
        name: <input type="text" name="FirstName" value="Bill" /><br /> sex:
        <input type="text" name="sex" value="man" /><br /> 
        <select name="education">
            <option value="本科">本科</option>
            <option value="研究生">研究生</option>
        </select>
    </form>

    <button id="get">序列化表單值</button>
    <div id="results"></div>
</body>
</html>

PS:

$("form").serialize(); //這一句是獲取網頁內所有表單的值
$("form#myForm");//獲取form中的myForm這個一個表單

$("#myForm:text");//獲取myForm表單中為輸入框的選項

$("#myForm:select");//獲取myForm表單中為下拉框的選項

json對象轉字符串:主流瀏覽器都支持JSON.stringify()

 2.利用serialize簡單完成登陸

這部分為自己原創,也順便應付下Http老師布置的登陸任務,html頁面代碼

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>FormJson</title>
<script type="text/javascript" src="../js/jquery-1.11.3.min.js"></script>
<style>
</style>
<script type="text/javascript">
    $(function(){
        $("#submit").click(function() {
            data1 = $("#myForm").serializeArray();
            //console.log(data1);
            data2 = JSON.stringify(data1);
            //console.log(data2);
            data3 = $("#myForm").serialize();
            //console.log(data3);
            var str ="";
            jQuery.ajax({
                type: 'POST',    //請求方式
                url:"myHandle.jsp?flags=login",
                dataType: "json",    //預期服務器返回的數據類型
                contentType: "application/x-www-form-urlencoded;charset=UTF-8",    //返回給服務器時候的字符編碼
                data: data3,    //發送到服務器上的數據,測試了一下傳data2的話是不行的,data1與data3可以
                success: function (data) {   
                    console.log(data);
                    if (data.statusCode == 200){    //修改成功的狀態碼為200
                        str+='<span>恭喜您登錄成功,您的姓名是'+data.name+'</span>';
                        str+='<br/><span>您的密碼是'+data.password+'</span>';
                        $("#result").html(str);
                    }else if(data.statusCode == 500){
                        $("#result").html("");
                        $("#loginInf").html("用戶名或者密碼輸入錯誤!"+'<br/>');
                    }
                },
                error: function (data) {
                    
                }
            });
         });        
    })
</script>
</head>
<body>
    <form id="myForm">
        <span id="loginInf"></span>
        姓名: <input type="text" name="name" /><br /> 
        密碼: <input type="password" name="password" /><br />
    </form>
    <button id="submit">登陸</button>
    <div id="result"></div>
</body>
</html>
<%@page contentType="text/html; charset=utf-8" import="business.jqueryForm,java.util.Enumeration,java.io.*,java.net.URLEncoder,java.util.HashMap"%> 
<jsp:useBean id="myHandle" class="business.jqueryForm" scope="page"></jsp:useBean>
<jsp:setProperty property="*" name="myHandle"/>
<%
    //測試使用,打印參數
     Enumeration e = request.getParameterNames();
    while (e.hasMoreElements()) {
        System.out.println(e.nextElement());
    } 
    System.out.println("flags:" + myHandle.getFlags());
    //獲取處理結果
    String returnStr = myHandle.getData(request, response);
    System.out.println("[DEBUG][returnStr]" + returnStr);
    //向前台輸出結果
    out.println(returnStr);
%>

然后dao層用到了如c3p0連接池,數據庫連接工具類,dbutils工具簡便一下開發,順便在溫習一下

package business;

import java.sql.SQLException;

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

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.json.JSONObject;

import sun.org.mozilla.javascript.internal.ast.NewExpression;

import com.sun.org.apache.bcel.internal.generic.NEW;

public class jqueryForm {

    /*
     * 統一獲取數據的入口
     */
    public String getData(HttpServletRequest req, HttpServletResponse resp)
            throws SQLException {
        if ("login".equals(flags))
            return Login();

        return "";
    }

    /*
     * 判斷是否登錄成功
     */
    private String Login() throws SQLException {
        // System.out.println(name+"...."+password);
        JSONObject jsonObject = new JSONObject();
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
        String sql = "select * from http_login where name='" + name + "' and password='" + password + "'";
        jqueryForm query = qr.query(sql, new BeanHandler<jqueryForm>(jqueryForm.class));
        if (query != null) {
            jsonObject.put("statusCode", 200);
            jsonObject.put("name", query.getName());
            jsonObject.put("password", query.getPassword());
        } else {
            jsonObject.put("statusCode", 500);
        }
        return jsonObject.toString();
    }

    // 實體bean參數以及getter/setter
    private String name;
    private String password;
    private String flags;

    public String getFlags() {
        return flags;
    }

    public void setFlags(String flags) {
        this.flags = flags;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

運行效果大概是這樣的,樣式就沒管了

自己之前看黑馬機構的視頻,使用servlet+jsp完成,把用戶的信息存到cookie中了,然后再jsp頁面用el表達式和jstl標簽進行回顯登錄信息的狀態!

當然了,實現方式數不勝數, 比如還可以用ajax+servlet的方式實現,servlet的代碼我也寫了寫,上個學期自學的javaweb,順便在溫習一下。

發現自己老是忘記servlet生命周期,在改動了web.xml中的信息后,總是不記得重新將項目發布到服務器中去,有次還鬧笑話找錯找了半個小時

package business;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.Map;

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

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.json.JSONObject;

@WebServlet("/jqueryForm")
public class jqueryFormServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        //獲取表單數據
        Map<String, String[]> map = request.getParameterMap();
        jqueryForm form = new jqueryForm();
        //一一對應set進去(需要引入beanutils的jar包),減少一個一個的request.getParameter("")與set進去了
        //注意前台name字段要與表字段一致,功能類似於jsp的usebean,setbean標簽
        try {
            BeanUtils.populate(form,map);            
        } catch (IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
        //這里就不采用MVC模式了,懶
        JSONObject jsonObject = new JSONObject();
        try {
            String loginInfo = Login(form.getName(),form.getPassword());
            jsonObject.put("statusCode", loginInfo);
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().write(jsonObject.toString());
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

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

    /*
     * 判斷是否登錄成功
     */
    private String Login(String name,String password) throws SQLException {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
        String sql = "select count(*) from http_login where name='" + name + "' and password='" + password + "'";
        Long query = (Long) qr.query(sql, new ScalarHandler());
        if (query > 0) {
            return "200";
        } else {
            return "500";
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM