Ajax使用jQuery与后台交互

Ajax使用jQuery与后台交互

  • Ajax使用jQuery与后台交互

    • 前言

      • Ajax
      • Ajax的优点
      • XmlHttpRequest对象
    • 数据篇
      • jquery-form的方式提交数据
    • 自定义数据篇
      • 自定义上传的数据
    • 文件篇
      • 前台使用ajaxuploadjs对文件进行上传
      • 后台使用commons-fileuploadjar上传文件
      • MyFilejava文件
      • UploadUtiljava工具
      • JAR包
      • 项目下载路径
    • 后言

前言

Ajax

Ajax就是异步JavaScript and XML缩写。

Ajax的优点

  1. 通过异步模式,提高用户体验
  2. 优化浏览器与服务器之间传输,按需索取
  3. Ajax引擎是在客户端运行的,承担了一部分本来由服务器承担的工作

XmlHttpRequest对象

Ajax的核心就是XmlHttpRequest对象。通过XMLHttpRequest对象,Web开发人员可以在页面加载以后进行页面的局部更新。

数据篇

jquery-form的方式提交数据

  1. 前端数据
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ajax提交表单</title>
</head>
<body>
    <form action="form_submit" method="post" id="myform" name="myform">
        <input type="text" id="mytext" name="mytext" value="text"/>
        <button type="button" id="mybutton" name="mybutton">提交</button>
    </form>

<!-- 导入必须的文件 -->
<script type="text/javascript" src="/MyAjax/resource/js/jquery-1.9.1.js"></script>
<script type="text/javascript" src="/MyAjax/resource/js/jquery-form.js"></script>
<script type="text/javascript">
    <!--向后台发送post请求-->
    $(document).ready(function() {
        $("#mybutton").click(function () {
            $.ajax({
                type:"POST",//提交请求的方式
                cache:true,//是否有缓存
                url:"form_submit",//访问servlet的路径
                dataType:"json",//没有这个,将把后台放会的json解析成字符串
                data:$(‘#myform‘).serialize(),//把内容序列化
                async:true,//是否异步
                error:function(request) {//请求出错
                    alert("出错");
                },
                success:function(data) {//获得返回值
                    alert(data["mytext"]);
                }
            })

        });
    });
</script>
</body>
</html>

2.后台代码

package com.chen.servlet;

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;

import net.sf.json.JSONObject;
/**
 *
 * @author CHEN
 * @description 提交表单
 * @导包:json-lib-2.2.2-jdk15.jar\ezmorph-1.0.4.jar
 */
@WebServlet("/form_submit")
public class FormSubmit extends HttpServlet{

    /**
     *
     */
    private static final long serialVersionUID = -8615452472287083708L;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        System.out.println(req.getParameter("myid"));
        String mytext=req.getParameter("mytext");
        JSONObject jObject=new JSONObject();
        jObject.put("mytext", mytext);
        PrintWriter out=resp.getWriter();
        out.print(jObject);
        out.close();
    }

}

自定义数据篇

自定义上传的数据

有时候,我们所需的内容并不总是在一个表单中,这时候,我们就需要进行拼接,以下提供了两种拼接的方法。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ajax提交表单</title>
</head>
<body>
    <!-- 共有的某行数据 -->
    <input type="hidden" id="myid" name="myid" value="123456">
    <form action="form_submit" method="post" id="myform" name="myform">
        <input type="text" id="mytext" name="mytext" value="text"/>
        <button type="button" id="mybutton" name="mybutton">提交</button>
    </form>

<!-- 导入必须的文件 -->
<script type="text/javascript" src="/MyAjax/resource/js/jquery-1.9.1.js"></script>
<script type="text/javascript" src="/MyAjax/resource/js/jquery-form.js"></script>
<script type="text/javascript">
    <!--向后台发送post请求-->
    $(document).ready(function() {
        $("#mybutton").click(function () {
            //准备数据
            var myform=$(‘#myform‘).serialize();//表单序列化
            //myform += "&myid="+encodeURIComponent($(‘#myid‘).val());//方法1:按格式拼接
            myform+= "&"+$(‘#myid‘).serialize();//方法2:拼接上需要的字符串
            $.ajax({
                type:"POST",//提交请求的方式
                cache:true,//是否有缓存
                url:"form_submit",//访问servlet的路径
                dataType:"json",//没有这个,将把后台放会的json解析成字符串
                data:myform,//把内容序列化
                async:true,//是否异步
                error:function(request) {//请求出错
                    alert("出错");
                },
                success:function(data) {//获得返回值
                    alert(data["mytext"]);
                }
            })

        });
    });
</script>
</body>
</html>

方法1:按格式拼接

myform += “&myid=”+encodeURIComponent($(‘#myid’).val());

方法2:拼接上需要的字符串

myform+= “&”+$(‘#myid’).serialize();

后台的接收还是一样的。

文件篇

前台使用ajaxupload.js对文件进行上传

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ajax提交表单</title>
</head>
<body>
    <!-- 共有的某行数据 -->
    <input type="hidden" id="myid" name="myid" value="123456"/>
    <form action="form_submit" method="post" id="myform" name="myform" >
        <input type="text" id="mytext" name="mytext" value="text"/>

        <button type="button" id="mybutton" name="mybutton">提交</button>
    </form>

    <br/>
    <form action="#" enctype="multipart/form-data">
        <input type="file" id="myfile" name="myfile"/>
        <button type="button" id="myfilebutton" name="myfilebutton">上传</button>
    </form>

    <div id="mydiv"></div>
<!-- 导入必须的文件 -->
<script type="text/javascript" src="/MyAjax/resource/js/jquery-1.9.1.js"></script>
<script type="text/javascript" src="/MyAjax/resource/js/jquery-form.js"></script>
<script type="text/javascript" src="/MyAjax/resource/js/ajaxupload.js"></script>
<script type="text/javascript">
    /**
    向后台发送post请求
    **/
    $(document).ready(function() {
        $("#mybutton").click(function () {
            //准备数据
            var myform=$(‘#myform‘).serialize();//表单序列化
            //myform += "&myid="+encodeURIComponent($(‘#myid‘).val());//方法1:按格式拼接
            myform+= "&"+$(‘#myid‘).serialize();//方法2:拼接上需要的字符串
            $.ajax({
                type:"POST",//提交请求的方式
                cache:true,//是否有缓存
                url:"form_submit",//访问servlet的路径
                dataType:"json",//没有这个,将把后台放会的json解析成字符串
                data:myform,//把内容序列化
                async:true,//是否异步
                error:function(request) {//请求出错
                    alert("出错");
                },
                success:function(data) {//获得返回值
                    alert(data["mytext"]);
                }
            })

        });
    });

    /**
    向后台发送文件
    **/
    $(document).ready(function() {
        $(‘#myfilebutton‘).click(function() {
            $.ajaxFileUpload({
                url:"file_submit",//后他处理的路径
                secureuri:false,//是否需要安全协议,一般置为false
                fileElementId:‘myfile‘,//文件id
                dataType:"json",//返回类型,默认string
                success:function(data,status) {
                    alert(data["message"]);//返回信息
                    //拼接
                    var a=document.createElement("a");
                    a.href=data[‘allUrl‘];
                    a.innerHTML=data[‘fileName‘];
                    var mydiv=document.getElementById(‘mydiv‘);
                    mydiv.appendChild(a);
                },
                error:function(data,status,e) {//返回信息
                    alert(‘出错了‘);
                }
            });
            return false;
        });
    });

</script>
</body>
</html>

后台使用commons-fileupload.jar上传文件

package com.chen.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetAddress;

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.fileupload.FileUploadException;

import net.sf.json.JSONObject;

import com.chen.model.MyFile;
import com.chen.util.UploadUtil;

/**
 *
 * @author CHEN
 * @description 上传文件
 */
@WebServlet("/file_submit")
public class FileSumbit extends HttpServlet{

    /**
     *
     */
    private static final long serialVersionUID = -1868776810282017505L;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        System.out.println("上传文件");
        MyFile file=new MyFile(req.getServletContext().getRealPath("/resource/uploadTemp"),req.getServletContext().getRealPath("/resource/upload"));
        UploadUtil uUtil=new UploadUtil();
        String message="上传失败";
        try {
            message=uUtil.uploadfiFactoryle(file, req);
        } catch (FileUploadException e) {

            e.printStackTrace();
        }

        //返回的内容
        PrintWriter out=resp.getWriter();
        JSONObject jsonObject=new JSONObject();
        jsonObject.put("message", message);

        jsonObject.put("allUrl","http://"+InetAddress.getLocalHost().getHostAddress()+":"
        +req.getLocalPort()+File.separator+req.getContextPath()+"/resource/upload/"+file.getFileName());
        jsonObject.put("fileName", file.getFileName());
        out.print(jsonObject);
        out.close();
    }
}

MyFile.java文件

package com.chen.model;

import java.io.File;
/**
 *
 * @author CHEN
 *
 */
public class MyFile {
    private File file;
    private String fileName;//文件名
    private String tempUrl;//缓存路径
    private String saveUrl;//保存路径

    private String allUrl;//文件全路径

    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    public MyFile() {
        super();
    }
    public File getFile() {
        return file;
    }
    public void setFile(File file) {
        this.file = file;
    }
    public String getSaveUrl() {
        return saveUrl;
    }
    public void setSaveUrl(String saveUrl) {
        this.saveUrl = saveUrl;
    }
    public String getTempUrl() {
        return tempUrl;
    }
    public void setTempUrl(String tempUrl) {
        this.tempUrl = tempUrl;
    }

    public String getAllUrl() {
        return allUrl;
    }
    public void setAllUrl(String allUrl) {
        this.allUrl = allUrl;
    }
    public MyFile(String tempUrl, String saveUrl) {
        super();
        this.tempUrl = tempUrl;
        this.saveUrl = saveUrl;
    }
    public MyFile(String saveUrl) {
        super();
        this.saveUrl = saveUrl;
    }
}

UploadUtil.java工具

package com.chen.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;

import com.chen.model.MyFile;

import java.util.List;
/**
 *
 * @author CHEN
 * @description 上传文件的工具
 */
public class UploadUtil {

    public String uploadfiFactoryle(MyFile file, HttpServletRequest request)
            throws FileUploadException, IOException {

        // 配置上传的属性
        DiskFileItemFactory dfiFactory = new DiskFileItemFactory();
        dfiFactory.setSizeThreshold(10 * 1024);
        dfiFactory.setRepository(new File(file.getTempUrl()));

        // 配置解析器
        ServletFileUpload sfupLoad = new ServletFileUpload(dfiFactory);
        sfupLoad.setHeaderEncoding("ytf-8");

        // 对请求进行解析
        List<FileItem> filList = sfupLoad
                .parseRequest(new ServletRequestContext(request));
        // 文件名
        String fileName = null;
        String allUrl=null;

        //for (FileItem item : filList) {
        FileItem item = getUploadFileItem(filList);
            if (item.isFormField()) {// 普通表单
                return "文件错误";
            } else {// file表单
                fileName = item.getName();
                System.out.println(fileName);
                allUrl=file.getSaveUrl()+ File.separator + fileName;
                FileOutputStream out = new FileOutputStream(allUrl);
                InputStream in = item.getInputStream();
                // 开始存入服务器端
                byte[] buf = new byte[1024];
                int len = 0;
                while ((len = in.read(buf)) > 0)
                    out.write(buf, 0, len);
                in.close();
                out.close();
                item.delete();// 删除临时文件
            }
        //}
        file.setFileName(fileName);
        file.setAllUrl(allUrl);
        return "上传成功";
    }

    private FileItem getUploadFileItem(List<FileItem> list) {
        for (FileItem fileItem : list) {
            if(!fileItem.isFormField()) {
                return fileItem;
            }
        }
        return null;
    }
}

JAR包

项目下载路径

因为CSDN上传文件大小有限制,所以我已经把jar包去掉了,如果有需要在评论留下你的联系方式。

源码下载地址

后言

作为后台人员,也应该懂点前端的东西,不是吗?

时间: 2024-10-08 20:20:30

Ajax使用jQuery与后台交互的相关文章

Javascript 中ajax实现前台向后台交互

第一种情况:前台传入字符串参数 后台返回json字符串.或是json数组  代码如下: 前台: $.ajax({ url: "xxx/xxx.action", data: "id=xxx", cache: false, async: false, success: function(result) { A:接收后台返回的数组 var data = eval(result); if (typeof(data) != "undefined" &

通过ajax前端后台交互/登录页和注册页前端后台交互详解/前端后台交互基础应用/几个后台函数的基础应用/php文件函数基础应用/php字符传函数基础应用/php数组函数基础应用

  前  言  PHP     学习了好久的PHP,今天做一个可以后台交互的登录页和注册页,没做什么判断,简单的了解一下. 具体的内容分析如下: ① PHP中的数据传输-->>由注册页传输给注册页后台-->>注册页后台经过转码保存实例化的文件 ② 在登录页输入账户密码,点击登录时,获得触发函数:获得由后台传输过来的true或者false---转换页面或者弹出输入错误.    登录页后台获取保存账户密码的实例化文件,通过转码,if判断之后传输给前台登录页TURE或者FALSE. 总共

利用ajax与后台交互容易出现的问题及解决办法

Ajax在当今的前后台交互中可以说是很火的.那么在使用ajax与后台交互的过程中我们会遇到哪些小问题呢. 使用get方法的时候: 1.浏览器的缓存问题:当我们多次访问同一个地址的时候,浏览器不会每次都更新地址,而是将第一次访问到的数据缓存起来,后面访问同样地址的时候直接从缓存中获取数据,而不会从服务器中读取数据,因此如果我们改变后台中的数据,我们访问时数据将不会更新,访问到的数据也不会改变.如何解决这个问题呢?这时我们可以在"url?"后面用"&"符号连接一

Vue中使用Ajax与后台交互

一.下载依赖包 npm install --save axios 二.封装 ajax 请求模块 1. api/ajax.js /* ajax 请求函数模块 */ import axios from 'axios' export default function ajax (url = '', data = {}, type = 'GET') { return new Promise(function (resolve, reject) { let promise if (type === 'GE

jquery:ajax接收不到后台返回值

html页面a元素如果加上href=javasrcipt:void(0)会导致ajax接收不到后台返回值. 例如: <p class="chatmsg_load_more"><a href="javascript:void(0)">加载更多</a></p> 如果这个时候,你恰好需要点击"加载更多"执行ajax请求,那么很不幸的告知您,您的ajax请求,不会执行success后的代码,也就是说: $(

基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式

在基于MVC4+EasyUI的Web开发框架里面,大量采用了Jquery的方法,对数据进行请求或者提交,方便页面和服务器后端进行数据的交互处理.本文主要介绍利用Jquery处理数据交互的几种方式,包括获取数据并显示,插入新数据到服务器,更新数据,删除数据等操作. 1.利用Jquery获取数据并显示 为了顺利获取数据,我们需要保持页面端调用和服务器端保持一致,并相应的把数据转换或者封装为对象实体进行处理. 下面我们以一个简单的全国省份.全国城市.全国城市行政区的案例进行Demo代码的介绍.   总

基于MVC+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式

在基于MVC4+EasyUI的Web开发框架里面,大量采用了Jquery的方法,对数据进行请求或者提交,方便页面和服务器后端进行数据的交互处理.本文主要介绍利用Jquery处理数据交互的几种方式,包括获取数据并显示,插入新数据到服务器,更新数据,删除数据等操作. 1.利用Jquery获取数据并显示 为了顺利获取数据,我们需要保持页面端调用和服务器端保持一致,并相应的把数据转换或者封装为对象实体进行处理. 下面我们以一个简单的全国省份.全国城市.全国城市行政区的案例进行Demo代码的介绍.   总

ASP.NET Ajax和Jquery Ajax实例

在图书信息管理系统中,用到了Ajax和JQueryAjax,算是都体验了一把.刚开始用的时候很陌生,迟迟不敢下手.但是不动手什么时候也成功不了,就上网找例子,照着敲吧.当然,中间也遇到了一些小的错误,最终还是成功了. Ajax AJAX即"AsynchronousJavascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下

ECharts 与struts的后台交互之柱状图

ECharts主页:  http://echarts.baidu.com/index.html ECharts-2.1.8下载地址:  http://echarts.baidu.com/build/echarts-2.1.8.zip ECharts官方实例:  http://echarts.baidu.com/doc/example.html ECharts官方API文档:  http://echarts.baidu.com/doc/doc.html 1.ECharts是百度的开源项目,在其官网