struts2怎样获取AJAX post请求传递的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2怎样获取AJAX post请求传递的数据相关的知识,希望对你有一定的参考价值。
我需要从页面传递一个对象数组,不知道struts2怎样获取这个数组?而且这个数组对象需要转换成一个List对象,提示Ognl无法转换的错误。。。
从页面传对象到ActionAction用List接收,这样肯定是可以的,只要你的参数名字相同就行
如果真的不行,那就是用struts2的类型转换功能,手动把js数组串转换为
java的List,需要是用strutstypeconverter接口
从Action传对象到页面,把json串,以流的形式写入页面,这样 ajax就会接到
如果你不熟悉,那么可以使用json插件,目的是简化你的页面流操作
到页面的json只是字符串,通过js的方法exal()动态编译就能得到json对象 参考技术A 除了uri 还有隐藏域的方式 参考技术B 你可以把这个对象以url参数的形式传递到action中,在action里定义一个全局字段,以及getter setter方法。这个全局的字段可以直接定义成List类型
JQueqy Ajax的使用(POST请求)
一,Ajax GET请求和POST请求知识点
1,GET请求不用添加 {% csrf_token%} ,也不会报csrftoken的错
2,POST请求的话,就需要添加 {% csrf_token%} 标签, 而且要使用$.ajax() 方法,将token传递到服务端
3,传递过去就行了,后台自动会处理,无需用手工处理这个token
二,以下是代码示例
以下是index.html代码示例(里面有使用ajax,GET和POST方法的代码示例)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="x-ua-compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 <title>AJAX局部刷新实例</title> 8 </head> 9 <body> 10 <!-- 说明,csrf_token其实就是一个input框 ,类型为"hiddent"即隐藏的,如下注释的代码 --> 11 <!-- <input type="hidden" name="csrfmiddlewaretoken" value="IQlJvU6mRj3yKXP5YNV3ABZutgHOa546M04dysyQEBNGJ2euDogA8OX0vyLEiy12"> --> 12 {% csrf_token %} 13 <input type="text" id="i1">+ 14 <input type="text" id="i2">= 15 <input type="text" id="i3"> 16 <input type="button" value="AJAX提交1" id="b1"> 17 <input type="button" value="AJAX提交2" id="b2"> 18 <!-- 本次代码新增一个按扭 --> 19 <input type="button" id="b3" value="哥达"> 20 <hr> 21 <h1 id="d1">xxxxxxxxxxxx</h1> 22 <!-- 以下是导入JQUERY --> 23 <script src="/static/jquery-3.3.1.js"></script> 24 <!-- 以下是使用jquery版的ajax请求 --> 25 <script> 26 // 添加点击事件,定义回调函数,当点击#b1元素时,则执行函数 27 $("#b1").on("click", function () { 28 $.ajax({ 29 url:"/ajax_add/", // 要跳转到哪里,所以就没有必要再使用form表单的跳转和提交了 30 type:"GET", //可以使用POST,或GET都可以 31 data:{"i1":$("#i1").val(),"i2":$("#i2").val()}, //使用jquery获取DOM元素的值,并传递到后端 32 success:function (data) { //发送AJAX请坟成功后,执行回调函数,data则是获取的后端数据, 33 $("#i3").val(data); //给DOM元素设置值 34 } 35 }) 36 }) 37 // jquery ajax使用 POST方法提交,则必须把CSRF_TOKEN也传递到服务器(这样才是完全和form表单提交的方式一样) 38 // 如果是使用get方法提交,则就不需要csrf_token, 39 $("#b2").on("click", function () { 40 // 找到页面上的CSRF_TOKEN,name属性值应该都一样, 41 // 使用jquery语法,根据name属性找到元素,再使用val方法获取值 42 var csrfToken = $("[name=‘csrfmiddlewaretoken‘]").val(); 43 $.ajax({ 44 url:"/ajax_add2/", // 要跳转到哪里,所以就没有必要再使用form表单的跳转和提交了 45 type:"POST", //可以使用POST,或GET都可以 46 //使用jquery获取DOM元素的值,并传递数据到后端 47 data:{"i1":$("#i1").val(),"i2":$("#i2").val(),‘csrfmiddlewaretoken‘:csrfToken}, 48 success:function (data) { //发送AJAX请坟成功后,执行回调函数,data则是获取的后端数据, 49 $("#i3").val(data); //给DOM元素设置值 50 } 51 }) 52 }) 53 //以下事件是点击后使用,使用jqurey创建一个IMG标签,并添加上, 54 $(‘#b3‘).on(‘click‘,function(){ 55 $.ajax({ 56 // url:‘/test/‘, 57 // type:‘get‘, 58 success:function(a){ 59 //在页面上创建一个标签 60 var myimg=$("<img>").attr(‘src‘,‘/static/1.jpg‘); 61 $(‘#d1‘).append(myimg); 62 } 63 }) 64 }) 65 66 </script> 67 </body> 68 </html>
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r‘^admin/‘, admin.site.urls), url(r‘^index/$‘,views.index), url(r‘^ajax_add/$‘,views.ajax_add), url(r‘^ajax_add2/$‘,views.ajax_add2), ]
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.shortcuts import render from django.http import HttpResponse # Create your views here. def index(request): return render(request,‘index.html‘) def ajax_add(request): print (request.GET.get(‘i1‘)) print (request.GET.get(‘i2‘)) i1=int(request.GET.get(‘i1‘)) i2=int(request.GET.get(‘i2‘)) ret=i1+i2 return HttpResponse(ret) def ajax_add2(request): print (request.POST.get(‘i1‘)) print (request.POST.get(‘i2‘)) i1=int(request.POST.get(‘i1‘)) i2=int(request.POST.get(‘i2‘)) ret=i1+i2 return HttpResponse(ret)
三,知识点
1 <!-- 说明,csrf_token其实就是一个input框 ,类型为"hiddent"即隐藏的,如下注释的代码 --> 2 <!-- <input type="hidden" name="csrfmiddlewaretoken" value="IQlJvU6mRj3yKXP5YNV3ABZutgHOa546M04dysyQEBNGJ2euDogA8OX0vyLEiy12"> -->
// jquery ajax使用 POST方法提交,则必须把CSRF_TOKEN也传递到服务器(这样才是完全和form表单提交的方式一样) // 如果是使用get方法提交,则就不需要csrf_token,
以上是关于struts2怎样获取AJAX post请求传递的数据的主要内容,如果未能解决你的问题,请参考以下文章
Struts2框架怎样在Ajax请求中接收数组或List集合参数
js源码 模仿 jquery的ajax的获取数据(get,post )的请求封装