一场JS和AJAX引起的风波

    xiaoxiao2021-03-25  139

    从来不知道AJAX是什么,也从来没有想过我会和AJAX打交道,对于做Android的我来说,什么AJAX,什么JS,都去一边去,在学校的时候也就是为了应付考试学了那么一点点JavaScript,学完就什么都忘了,安心研究我的Android去了。

    在公司接到的任务是做一个web版的文件下载系统,我是基于springMVC做的,里面会涉及到一些js代码,不过都是简单的,我还是做得来的。本来想的是页面用JavaScript来写,然后里面的所有功能都用java来实现。任务里面有一个功能是点击一个按钮弹出来输入框,本来想着是用java自带的弹框类来写:

    String inputValue = JOptionPane.showInputDialog("Please input a value"); 可是我获取不到点击确定和取消按钮时的事件,也许是有这个方法我没有找到,也许是根本就获取不到这两个按钮的点击事件,然后我就换成了Swing,毕竟之前学过java,这些还是会做的,简单代码如下:

    public class CertWindow extends JFrame{ JTextField text1,text2; JButton btnSure,btnCancle; int a; public CertWindow(){ init(); // this.setUndecorated(true); //使得窗体中的关闭按钮没有点击效果 // this.getRootPane().setWindowDecorationStyle(JRootPane.INFORMATION_DIALOG); // this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); setVisible(true); //点击窗体的关闭按钮,窗体消失,程序继续执行 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } void init(){ setLayout(new FlowLayout()); add(new JLabel("输入下载密码:")); init1(); add(new JLabel("再次输入下载密码:")); init2(); btnSure=new JButton("确定"); add(btnSure); btnCancle=new JButton("取消"); add(btnCancle); } void init1(){ text1=new JPasswordField(30); add(text1); } void init2(){ text2=new JPasswordField(30); add(text2); } } 我做的这个项目是要在手机端用的,用java做的窗体在IOS设备上是不能用的,所以就得换成H5和JavaScript来做,这下忙活了好长时间才做出来,虽然这个不难,但是对我来说确实不简单(毕竟好久没接触过了),还是得做啊,详见: H5+CSS+JavaScript自定义输入框

    这些都做完之后,有一个功能就是在点击一个按钮之后,数据库中的一个字段要发生改变,js中不能直接修改数据库,我就想着用java代码来做修改数据库字段值的功能,然后我就用<%%>来调用,结果发现在运行的时候,系统会先执行<%%>,然后再执行js,这就有点尴尬了。

    后来通过各种途径才知道,这个地方可以用AJAX来做,当我听到AJAX的时候,真是一脸懵逼,AJAX是什么鬼,通过上网查和问同学,就是没搞明白。后来跟同事进行交流的时候才知道。AJAX是运行在前段的,它的作用的是给后台发送请求,然后后台接收到请求之后,做相应的操作,懂得原理之后,我就不那么懵了,那就开始写。

    $.ajax({ type:'POST', url:'Change', data:{} });就这一点代码,然后java后台有一个类,做相应的操作:

    @WebServlet("/Change") public class Change extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub // response.getWriter().append("Served at: ").append(request.getContextPath()); doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ /* 实现让链接失效的功能 */ /* 1、获取数据库中用于判断状态的字段。 2、改变字段的值。 */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub // doGet(request, response); System.out.println("updateTest"); try { Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:/" + "d:/info.db"); Statement stamt = conn.createStatement(); String link=DownCert.getLink(); System.out.println("state:"+DownCert.getFlag()); String sqlUpdate = "update inf set flag=1 where link="+link; stamt.executeUpdate(sqlUpdate); stamt.close(); conn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } } 一开始,请求就是发送不过去,后来才知道是url写错了(公司有同事是做这方面的,给解决了),不过到现在我还是不知道这个url的书写规则。虽然这不是我擅长的领域,但是还是学到了不少东西,不过,还是不想做这方面的工作,毕竟不是我的专长,好怀念我的Android。

    转载请注明原文地址: https://ju.6miu.com/read-2656.html

    最新回复(0)