`

ajaxSubmit,json,struts2,提示保存“json返回值”

阅读更多
问题回顾:
1.需求:jsp页面通过<input type="file" ...>上传图片,后台对应action对图片做一些压缩,描边等处理后,将处理完的image返回到页面显示出来。
2.解决方案:采用ajaxSubmit提交,通过返回的json数据,将image填充到对应的<div>中

>>>>>>>>>>想看最终结果的直接下跳看标题5<<<<<<<<<<<<<<
遇到的几个问题:
假设<input type="file" id="upImage" name="upImage">
1.傻瓜式的认为,通过普通的ajax提交就能做到(代码如下)

$.ajax({
    url:xxxx,
    data:'upImage='+ $('#upImage').val(),
    ....
    success:function(returnData){....}

})


错误点:后台得到的只是String值,并不是通过form序列化的File

2.将form 序列化以后 进行上传
$.ajax({
    url:xxxx,
    [color=red]data:$('#form1').formSerialize(),[/color]
    ....
    success:function(returnData){....}

})


结果:不成功,打印了一下$('#form1').formSerialize(),发现里面没有对upImage数据,这个原因不明,希望看到这个的大神们给个解释,3Q

3.通过ajaxSubmit上传______第一步

需要的js
jquery.js
jquery.form.js

<1> js代码
$("#form1").ajaxSubmit( {
		url : "previewImageDeal",
		datatype : "json",
	        success : function(returnData){
				...
			
			},
                error:function(){
                        alert('error');
                         }
	});


<2>struts.xml代码
<action name="XXXX" class="XXXXXXX" method="XXXXXX">
    <result name="deal" type="json">
        <param name="includeProperties">dealStatus,dealMsg,dImgPath</param>
    </result>
</action>


<3>java 代码
    String dealStatus = null;
    String dealMsg = null;
    String dImgPath = null;

    //图片处理

    //给必要的变量赋值


js中的ajax方法,直接进的error.......无语

4.通过ajaxSubmit上传______第二步

参考网上的一些资料,在3的基础上将js中dataType:'json'去掉。strust.xml返回值类型仍然是json即<result name="deal" type="json">
>>>成功进了 success方法
随后在success中打印了返回的结果 新的问题出现了

4.1 问题:success(retrunData)的returnData被一对<pre></pre>标签包住了
应对方法 :tong过js的replace方法将<pre></pre>去掉 得到的数据是期望的json格式;进一步的通过 var jasonData = eval('('+returnData+')'); ;然后业务逻辑处理
>>>在firfox下调试成功
转战ie.chrmo,新的问题又出现了

4.2 问题:在IE、Chrmo中都提示 是否下载“XXXXXXXXXXX” ,打开一看,是返回的json数据,我表示很无语
应对方法:上网查各种资料 。。。。。。。。没有一个完全匹配遇到的这个问题,但是,通      过网上的讨论可以定位问题所在
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
之所以会出现下载,是因为struts中对json的理解是 application/json ,而ajaxSubmit是提交的表单(虽然只需要对表单中的file处理),对应的action对表单数据处理之后通过struts.xml的重定向,<result name="success" type="json">导致了提示“下载json”
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>



5.通过ajaxSubmit上传______第三步
吐血应对方法,参考了网上各家资料,最后终于跑通了,中间的曲解就不记录了,只记录一下对的东西,写到这里我想起了一句话,“遇到问题的时候是求助于前辈们,还是自己查资料解决”,此时我感觉自己查资料印象更深刻,所以希望看到的朋友们,遇到问题的时候千万不要不假思索的就去问别人,找人帮忙写代码,解决问题的过程能让自己对一些东西有更深层次的理解,这个在求助于别人的时候是得不到。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5.1 java中关键代码
private JSONObject returnData = null;

//这个到底有没有用,还不知道,有点疲劳,不想做实验了
response.setContentType("text/xml;charset=utf-8");

//将返回结果保存到map中,然后转成json
Map<String, String> map = new HashMap<String, String>();
map.put();
map.put();
map.put();
returnData = JSONObject.fromObject(map);//转JSON
response.getWriter().print(returnData );//打印

 


5.2 xml关键部分
<action name="xxxx"class="xxx" method="XXX" >
			
	<result name="deal" type="json">
		<param name="contentType">text/html</param>
		<param name="includeProperties">returnData</param>
	</result>
</action>

5.3 js关键部分
[color=red]说明:java中通过print打印了想要的json结果,struts.xml中又通过includeProperties强行收留了returnData,所以在js的success方法中会看到两个json结果块。为什么要includeProperties呢,因为不加includeProperties标签或者加空标签(<param name="includeProperties"></param>)会得到一大大大大堆不想要的结果,看着就烦,而且还消耗系统和网络资源[/color]
$("#form1").ajaxSubmit( {
		url : "action名字",
//		datatype : "json",//彻底注释掉
	    success : function(returnData){
				returnData = returnData.substring(0,returnData.indexOf('}')+1);//只要print的json结果
				var isWindow = false;
				//window系统路径是"\" 要进行转换  linux不需要转换
				if(returnData.indexOf('\\\\') >= 0){
					isWindow = true;
					//将路径中的"\"替换,不然parseJSON会出错
					returnData = returnData.replace(/\\\\/g,'_');
				}
				var jsonData = jQuery.parseJSON(returnData);
				
				
				if(jsonData.dealStatus == '0'){
					//错误处理
					alert(jsonData.dealMsg);
					$('#upImage').val('');
					$('#previewTR').css({"height":"0px"});
					$('#previewDiv').html('');
				}else{
					//成功处理图片
					var tempImagPath = jsonData.previewImagePath ;
					var finalImagePath = jsonData.finalImagePath ;
					if(isWindow){//window系统将"_"再转换成"/"
						tempImagPath = tempImagPath.replace(/_/g,'/');
						finalImagePath = finalImagePath.replace(/_/g,'\\');
					}
					$('#finalImagePath').val(finalImagePath);
					$('#previewTR').css({"height":jsonData.previewHeight+'px'});
					$('#previewDiv').html('<img src=\"'+tempImagPath+'\" />' );
				}
			}
	});

分享到:
评论
10 楼 AFO 2014-12-04  
sendJSON(Result.SUCCESS, response, false);
9 楼 zczjdyj123 2014-11-24  
999999999999999999999999999
8 楼 zczjdyj123 2014-11-24  
888888888888888888888888
7 楼 zczjdyj123 2014-11-24  
777777777777777777777777777
6 楼 zczjdyj123 2014-11-24  
555555555555555555555555
5 楼 zczjdyj123 2014-11-24  
444444444444444444444
4 楼 zczjdyj123 2014-11-24  
33333333333333333333333
3 楼 zczjdyj123 2014-11-24  
234444444444444
2 楼 zczjdyj123 2014-11-24  
草1233333
1 楼 zczjdyj123 2014-11-24  
引用
引用

相关推荐

    struts2 ajax 实例

    2. **JSON结果类型**:在struts.xml中配置JSON结果类型,使Action可以返回JSON格式的数据,供Ajax请求接收。 3. **JQuery/Ajax库**:使用JQuery库发送Ajax请求,例如`$.ajax()`或`$.getJSON()`方法,与Struts2的...

    struts2+jquery之form插件实现异步上传

    Struts2和jQuery是Web开发中的两个重要框架,它们结合使用可以实现许多强大的功能,其中包括异步文件上传。在这个主题中,我们将详细讨论如何利用Struts2和jQuery的form插件来实现这一功能。 首先,Struts2是一个...

    ajaxSubmit上传文件IE解析

    默认情况下,`ajaxSubmit`插件期望服务器端返回的是JSON格式的数据,但是在IE浏览器中,由于其对JSON的支持存在一定的限制,因此当服务器返回的数据格式不符合预期时,就会导致解析失败。 #### 解决方案 案例中...

    上传文件返回的json数据会被提示下载问题解决方案

    2. 前端在使用`ajaxForm`或类似方法发送请求时,明确指定`dataType: 'json'`,确保数据以JSON格式处理。 通过以上调整,可以确保在各种浏览器中,包括IE10+,上传文件后返回的JSON数据能够正常在页面上呈现,而不会...

    ajaxSubmit_一个封装了上传代码的ajax插件_

    1. **初始化和配置**:首先,开发者需要在JavaScript中初始化`ajaxSubmit`,并对其进行必要的配置,如设置URL(后端接口地址)、数据类型(通常为JSON或XML)以及成功和错误回调函数。 2. **表单绑定**:将`...

    使用ajaxSubmit文件实现多文件的异步上传

    2. **Ajax**: 异步JavaScript和XML,虽然名称中包含XML,但如今更广泛地用于传输各种类型的数据,如JSON。Ajax允许我们在不刷新页面的情况下与服务器交换数据,从而实现页面的动态更新。 3. **FormData**: HTML5...

    php结合jquery异步上传图片(ajaxSubmit)

    2. **jQuery和AjaxSubmit**: 引入jQuery库和AjaxSubmit插件的脚本,并编写JavaScript代码来监听表单提交事件: ```javascript $(document).ready(function() { $('#uploadForm').submit(function(event) { ...

    spring+struts2+mybatis框架实现单表增删改查、条件查询和分页、文件上传

    在本项目中,我们主要探讨的是如何利用Java的三大流行框架——Spring、Struts2和Mybatis,结合jQuery,来构建一个完整的Web应用程序。这个应用的核心功能包括对单个数据表进行基本的增删改查(CRUD)操作,实现条件...

    Ajax-jquery-ajaxSubmit.zip

    Ajax-jquery-ajaxSubmit.zip,使用ajax和json轻松提交表单。,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页的...

    解决IE下AjaxSubmit上传文件提示下载文件问题

    本文将探讨如何解决在Internet Explorer (IE) 浏览器下使用AjaxSubmit上传文件时出现提示下载文件的问题。 首先,我们需要理解问题的核心所在。在Spring MVC的后端,我们使用了`@RequestMapping`注解来处理文件上传...

    ajaxSubmit多文件上传用的包

    ajaxSubmit多文件上传用的包

    【Demo Project】ajaxSubmit+Servlet表单文件上传和下载

    2. **AjaxSubmit配置**:使用jQuery的AjaxSubmit方法,设置表单的提交方式为POST,启用FormData以支持文件上传,同时设置success回调函数处理服务器响应。 3. **文件数据封装**:浏览器将选中的文件封装成FormData...

    AjaxSubmit()提交file文件

    在传统的表单提交中,用户操作会导致整个页面刷新,而使用AjaxSubmit()方法可以实现在不刷新页面的情况下发送数据到服务器,并接收服务器的返回值,这样可以提供更加流畅的用户体验。 在进行AjaxSubmit()提交file...

    AjaxSubmit实现图片无刷新上传

    AjaxSubmit技术正是为了提升用户体验而诞生的,它使得网页可以在不刷新整个页面的情况下与服务器进行数据交互。本教程将深入讲解如何利用AjaxSubmit实现图片的无刷新上传,同时支持多图上传和预览功能。 一、Ajax...

    SpringMVC+jQuery(ajaxSubmit) 异步上传图片

    在本文中,我们将深入探讨如何使用SpringMVC和jQuery的ajaxSubmit插件实现异步上传图片的功能。这个功能在现代Web应用中非常常见,能够提供流畅的用户体验,无需页面刷新即可完成文件上传。 首先,我们需要了解...

    J2EE中JSON+Jquery_AJAX应用

    ### 2.3.3 当数据量比较大的时候要用post方法,此时如果要传递给action参数就必须要在url后面添加,如果要用如2中这样方便的操纵数据dataType就要指定为json 对于较大的数据集,推荐使用POST方法进行数据传输。这有...

    ajaxSubmit 提交使用的文件

    ajaxSubmit 提交使用的文件,解决form提交后导致重复提交数据问题

    ajaxSubmit局部刷新

    在以上代码中,`ajaxForm`方法将表单绑定到AjaxSubmit,`success`回调函数接收服务器返回的数据(假设是JSON格式),并将结果插入到id为`resultDiv`的元素中,从而实现局部刷新。如果发生错误,`error`回调会被调用...

    jquery ajaxSubmit 异步提交的简单实现

    在ajaxSubmit的回调函数中我们期望的dataType为json,因此后端返回的数据也应该是JSON格式。PrintWriter的print方法用于输出JSON对象的内容,并且随后关闭了PrintWriter对象以释放资源。 最后,还有一段关于后台...

Global site tag (gtag.js) - Google Analytics