一场JS和AJAX引起的风波

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012369373/article/details/60872114

从来不知道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。

展开阅读全文

ajax 可能是乱码问题引起

07-20

Action 中拼了一个xml格式的字符串:rnStringBuffer sb = new StringBuffer(" ");rn HttpSession session = request.getSession(false);rn List list = dao.getRootFlag();rn for(int i=0;i");rn sb.append(""+rp.getPorder()+"");rn sb.append(""+rp.getLon()+"");rn sb.append(""+rp.getLat()+"");rn sb.append(""+rp.getAreaID()+"");rn sb.append("" + "汉字" + "");rn sb.append("");rn rn sb.append("");rn rn PrintStream out = new PrintStream(response.getOutputStream());rn out.println(sb);rnrnrnjsp页面:rnfunction send_request(url,type)rn var http_request=false;//初始化变量rn if(window.XMLHttpRequest)rn http_request = new XMLHttpRequest();rn if(http_request.overrideMimeType)rn http_request.overrideMimeType("text/xml");rn rn else if(window.ActiveXObject)rn tryrn http_request = new ActiveXObject("Msxml2.XMLHTTP"); rn catch(e)rn tryrn http_request = new ActiveXObject("Microsoft.XMLHTTP");rn catch(e)rn rn rn if(!http_request)rn window.alert("不能创建XMLHttpRequest对象实例!");rn return false;rn rn http_request.open("GET",url,true);rn http_request.send(null);rnrn function processRequest()rn if(http_request.readyState==4)rn if(http_request.status==200) rn var xmlDoc=http_request.responseXML;rn window.alert(xmlDoc.xml);rn var thePlace = xmlDoc.getElementsByTagName("place"); rn window.alert("== " + thePlace.length);rn for(var i=0;i" + "汉字" + "");rn若换成 sb.append("" + "test" + "");rn整个过程获取xml文件都没问题,可是一旦出现中文,就没有了结果。rn如果无中文出现:rnwindow.alert(xmlDoc.xml);rnwindow.alert("== " + thePlace.length);rn两个alert 都没有问题,能输出正确的值。rn如果出现了中文:rnwindow.alert(xmlDoc.xml); alert 空白rnwindow.alert("== " + thePlace.length); alert 出 长度为0(其实正确的结果不应该为0);rnrn诸位给出出注意,看问题出在了哪里,难道是乱码引起的,该怎么处理?rnrn 论坛

没有更多推荐了,返回首页