用原生的AJax代码发送JSON数据到Action使其自动类型转化
来源:互联网 发布:python获取字符串长度 编辑:程序博客网 时间:2024/06/05 03:03
擦写完这个博客我就睡觉弄了一晚上终于懂了怎样用用原生的AJax代码发送JSON数据到Action使其自动类型转化了
1.前台
自己写了一个函数request用于发送Ajax请求传入一个参数Object 看源码
var request = function(obj) {// setting extendvar url = obj.url || "";var method = obj.method || "GET";var data = obj.data || null;var callback = obj.callback || undefined;var json = obj.json || false;var contentType = obj.contentType|| "application/x-www-form-urlencoded";var xhr = new XMLHttpRequest();xhr.open(method, url, true);// 设置请求数据的类型xhr.setRequestHeader("Content-Type", contentType);// 设置返回执行的函数xhr.onreadystatechange = function() {if (xhr.readyState == 4 && xhr.status == 200) {callback ? callback(xhr.responseText) : "";}}json ? xhr.send(JSON.stringify(data)) : xhr.send(obj2query(data));}
2后台的Action
package com.zealgrown.web.action;import java.io.ByteArrayInputStream;import java.io.InputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionContext;public class GetSubCategoriesAction extends BaseAction {private InputStream inputStream;// 种类的idprivate int categoryId;// 页数和每页的个数private int pageNo;private int pageSize;@Overridepublic String execute() throws Exception {//String pageSizea = ServletActionContext.getRequest().getParameter(//"pageSize");//String pageNoa = ServletActionContext.getRequest().getParameter(//"pageNo");String subCategories = "";if (categoryId > 0) {if (pageNo > 0 && pageSize > 0) {subCategories += subCategoryService.getSubCategoryByPageAndParent(pageNo, pageSize,categoryId);} else {subCategories += subCategoryService.getSubCategoryByPageAndParent(1, 10, categoryId);}} else {// 如果传来的categoryId不是有效的数字是字符串if (pageNo > 0 && pageSize > 0) {subCategories += subCategoryService.getSubCategoryByPage(pageNo, pageSize);} else {subCategories += subCategoryService.getSubCategoryByPage(1, 10);}}inputStream = new ByteArrayInputStream(subCategories.getBytes("UTF-8"));return SUCCESS;}public InputStream getInputStream() {return inputStream;}public void setInputStream(InputStream inputStream) {this.inputStream = inputStream;}public int getCategoryId() {return categoryId;}public void setCategoryId(int categoryId) {this.categoryId = categoryId;}public int getPageNo() {return pageNo;}public void setPageNo(int pageNo) {this.pageNo = pageNo;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}}
其中obj2query函数:
var obj2query = function(obj) {var query = "";for ( var item in obj) {if (obj.hasOwnProperty(item)) {// console.log("item is " + item + " and obj.item is " + obj[item]);query += item + "=" + obj[item] + "&";}}return query.substring(0, query.length - 1);};
现在想对 一个action上交数据:
有两种方法:
Get方法:
request({url : baseUrl + "getSubCategories?categoryId=" + categoryId+ "&pageNo=2&pageSize=3,callback : randerSubCategories});
Post方法:
request({url:baseUrl + "getSubCategories", data : { categoryId : id, pageNo : "1", pageSize : "2" }, method : "post",callback : randerSubCategories});
注意事项:
1.如果后台的类型为int前台传入的参数一定要是数字的字符串而且不能为null和undefined要不后台会报这个警告:
警告: Could not find action or result: /ZealGrown/getSubCategories
No result defined for action com.zealgrown.web.action.GetSubCategoriesAction and result input - action - file:/D:/Program%20Files/apache-tomcat-8.0.27/webapps/ZealGrown/WEB-INF/classes/struts-user.xml:25:66
虽然我们已经在配置文件中配置了/getSubCategories
2.方法是post的时候要用obj2query转化成pageNo=2&pageSize=2&categoryId=4的形状,因为Ajax的send发送时会将其变成请求对。
不能用JSON字符串,因为ajax不会解析JSON字符串Ajax会直接发送JSON字符串给后台,但是struct2不会解析JSON字符串,即SpringBoot 和 Spring MVC到不能直接解析JSON字符串。
用chrome查看发送的数据包的时候必须如下图
3.不能将Content-Type 设置成application/json形式这样action获取不了参数的如下图:
不过.net的mvc可以这样的详细请看:点击打开链接
擦擦1:12了睡觉擦擦擦
- 用原生的AJax代码发送JSON数据到Action使其自动类型转化
- ajax发送到action自动解析格式
- 原生js的Ajax提交json数据到后台
- Ajax发送json格式数据到Asp.net MVC服务端的一些代码片段
- ajax发送json数据到springmvc的controller
- ajax请求回来的数据是string将其转化成json对象
- springmvc中,异步发送表单数据到Action,并响应Json文本返回(后端代码)
- 用原生js,json解析ajax传回来的数据
- 通过Ajax post Json类型的数据到Controller
- 通过Ajax post Json类型的数据到Controller
- 通过Ajax post Json类型的数据到Controller
- 通过Ajax post Json类型的数据到Controller
- 有关用AJAX发送json数据到后台的问题总结
- ajax如何向action发送数据的
- 前台使用$.ajax()发送json数据,服务器响应后返回json数据实例(struts2+json+action)
- Django的原生Ajax提交数据代码
- Ajax使用Action中返回的Json数据的完整实例(二):action内将一个实体对象转化为json并返回
- list类型的数据转化成json类型的数据
- Properties类的使用
- Linux C: 基于C/S的多线程网络编程 2 (多客户端)
- nexus安装与配置
- Maven 打包的一些事儿
- Android应用开发之所有动画使用详解
- 用原生的AJax代码发送JSON数据到Action使其自动类型转化
- 《Head First Java》读书笔记(1)
- JSON中的{}与[]
- As-Conformal-As-Possible Surface Registration
- JS刷新当前页面的几种方法总结
- HDU 1577 判断两点之间是否存在整数点
- 判断素数
- win7 64位+vs2010+opencv2.4.10+cmake3.6编译报错的解决
- SWF2入门(一)