原生js的Ajax提交json数据到后台
2017-09-26 10:57
585 查看
原生ajax发送json数据到后台接收(将json转换为name=tom&pwd=123格式的字符串,简单,不在本次测试内),需要做到几点:
1,post方式发送。
2、json对象必须转换为json格式字符串
3、(setQequestHeader,可以默认或者application/json;)
4、后台接收,必须用request.getInputStream()方式。
SO:此种方式适合,前端发送json数据,后台接收后通过json解析,获取每条数据
不过,jQuery可以轻松解决此问题,直接发送json数据。(jQuery底层应该是先解析json成name=tom&pwd=123格式再提交后台的,我的猜测)
------------------------------------------------------------------------------------------
<script type="text/javascript" >
function getXMLHttpRequest(){
var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlhttp;
}
window.onload=function()
{
var xmlhttp=getXMLHttpRequest();
var data={
"username":"汤姆",
"password":"123"
}
var stringData=JSON.stringify(data);
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","${pageContext.request.contextPath}/AjaxDemo1",true);
//xmlhttp.setRequestHeader("text/plain;charset=UTF-8");//默认方式(可以发送json格式字符串)
//xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.setRequestHeader("Content-type","application/json;charset=UTF-8");//可以发送json格式字符串
//xmlhttp.send(data);//后台无法接收
//发送json数据,首先POST方式,再需要先格式化为json格式的字符串发送过去,后台才能接收到,
//并且需要后台通过request.getInputStream获取数据,无法通过getInparamter方法获取
xmlhttp.send(data);
}
</script>
后台代码:
@WebServlet("/AjaxDemo1")
public class AjaxDemo1 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");//null
String password = request.getParameter("password");//null
String contentType = request.getContentType();
//前端提交的数据是json格式的字符串数据时,需要以下方式接收数据
ServletInputStream is = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line=null;
while((line=br.readLine())!=null){
System.out.println(line); //{"username":"汤姆","password":"123"}
}
System.out.println(contentType);
response.getWriter().print("username="+username+","+"password="+password);//null,null
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
1,post方式发送。
2、json对象必须转换为json格式字符串
3、(setQequestHeader,可以默认或者application/json;)
4、后台接收,必须用request.getInputStream()方式。
SO:此种方式适合,前端发送json数据,后台接收后通过json解析,获取每条数据
不过,jQuery可以轻松解决此问题,直接发送json数据。(jQuery底层应该是先解析json成name=tom&pwd=123格式再提交后台的,我的猜测)
------------------------------------------------------------------------------------------
<script type="text/javascript" >
function getXMLHttpRequest(){
var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlhttp;
}
window.onload=function()
{
var xmlhttp=getXMLHttpRequest();
var data={
"username":"汤姆",
"password":"123"
}
var stringData=JSON.stringify(data);
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","${pageContext.request.contextPath}/AjaxDemo1",true);
//xmlhttp.setRequestHeader("text/plain;charset=UTF-8");//默认方式(可以发送json格式字符串)
//xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.setRequestHeader("Content-type","application/json;charset=UTF-8");//可以发送json格式字符串
//xmlhttp.send(data);//后台无法接收
//发送json数据,首先POST方式,再需要先格式化为json格式的字符串发送过去,后台才能接收到,
//并且需要后台通过request.getInputStream获取数据,无法通过getInparamter方法获取
xmlhttp.send(data);
}
</script>
后台代码:
@WebServlet("/AjaxDemo1")
public class AjaxDemo1 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");//null
String password = request.getParameter("password");//null
String contentType = request.getContentType();
//前端提交的数据是json格式的字符串数据时,需要以下方式接收数据
ServletInputStream is = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line=null;
while((line=br.readLine())!=null){
System.out.println(line); //{"username":"汤姆","password":"123"}
}
System.out.println(contentType);
response.getWriter().print("username="+username+","+"password="+password);//null,null
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
相关文章推荐
- 原生js,jquery通过ajax获得后台json数据动态新增页面元素
- JS实现AJAX提交数据到后台,实现验证用户名是否存在功能详解
- 以前都是通过ajax像后台传送数据,新接触了个form.js向后台提交数据的方式(付源码)
- ajax提交json数据,后台解析问题
- 原生JS的ajax处理json数据格式的异步请求完整例子
- js以json形式提交数据,后台接受
- ajax提交json数据,后台解析问题
- [JS笔记]$.ajax传JSON数据到后台的注意事项
- javascript中创建对象,并序列化为json,通过$.ajax的提交json数据到后台方法,取值为null的问题
- js提交数据到后台(json)," 被转译 成了"
- ajax 提交 json格式数据到后台
- JS实现AJAX提交数据到后台,实现验证用户名是否存在功能详解
- 用原生js,json解析ajax传回来的数据
- easyui 中的 form 提交 后获得 后台 的 json数据 与 jquery .ajax的不同之处
- MVC3/4项目开发中遇到的ajax提交Json数据到后台Controller处理(接收参数:多重JSON)
- struts2 + ajax(由前台的form提交数据到后台,再根据form所调用返回获取的后台json格式的数据返回到前端,然后前端用jquery对json数据进行解析)==》》涉及文件上传的部分
- js以json形式提交数据,后台接受
- html中的js监听付款按钮--触发ajax调用php后台--得到的json数据---交给安卓原生处理
- struts2 + ajax(由前台的form提交数据到后台,再根据form所调用返回获取的后台json格式的数据返回到前端,然后前端用jquery对json数据进行解析)==》》涉及非文件上传的部分
- 原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)