ie不解析 dwz 返回的json对象,求解决办法

kakaximu 发布于 2013/12/04 15:18
阅读 3K+
收藏 1

表单提交

<form method="post" action="${BASE_PATH}/member/addMember" class="pageForm -validate" onsubmit="return validateCallback(this, dialogAjaxDone);">

后台处理返回

this.render(DwzRender.dailogSuccessAndClose(flag, "listMember"));

用IE浏览器,前台直接就输出json格式

{ "statusCode":"200","message":"操作成功","navTabId":"listMember","rel":"","callbackType":"closeCurrent","forwardUrl":"","confirmMsg":"" }


自己解决了

在 dwz.ajax.js 的validateCallback 中,应为有验证 form.valid() 方法造成的


function validateCallback(form, callback, confirmMsg) {
	var $form = $(form);

	if (!$form.valid()) {
		return false;
	}
	var _submitFn = function(){
		$.ajax({
			type: form.method || 'POST',
			url:$form.attr("action"),
			data:$form.serializeArray(),
			dataType:"json",
			cache: false,
			success: callback || DWZ.ajaxDone,
			error: DWZ.ajaxError
		});
	};
	if (confirmMsg) {
		alertMsg.confirm(confirmMsg, {okCall: _submitFn});
	} else {
		_submitFn();
	}	
	return false;
}




解决办法

去掉 form 表单的 onSubmit 或直接 return false

<form id="form0" method="post" action="${BASE_PATH}/member/addMember" class="pageForm -validate>

submit 按钮的type 类型改为button ,并添加onclick

<button type="button" onclick="validateCallback('#form0', dialogAjaxDone);">保存</button>



谢谢大家












加载中
0
francis-x
francis-x
没看懂,你在哪边处理返回值的?
0
francis-x
francis-x

想起来了,IE不支持返回json类型的数据,你可以将返回的contextType改成html/text试试。

k
kakaximu
contentType一直是 text/html
0
VmLia
VmLia
前后台交互主要途径就是json。。。你这个可能是看起来像json的字符串,请问你返回前台之前用json-jar转过么?
k
kakaximu
我用的是jfinal+dwz 返回类型就是json
0
bigtiger02
bigtiger02

设置http返回头的contentType为application/json

response.setContentType("application/json");

还有个问题就是在使用iframe上传文件时返回头需要设置成application/html,才可正确获取。

bigtiger02
bigtiger02
@kakaximu 额,现在解决了吗?
k
kakaximu
设置这个不行,变成保存文件了
0
一路找北

应该是响应头设置ContentType为text/html,前端获取到json字符串的时候,需要

json = eval('('+json+')'); 来处理一下。

这样所有浏览器都支持。

0
e
eils
我按照楼主解决方法上修改的, <button   type="button"   onclick="validateCallback('#form0', dialogAjaxDone);">保存</button>这里的onclick事件不执行,补充:我用的是navTabAjaxDone,在action里也改成了navTabID
k
kakaximu
你的form 没有id,用这个 validateCallback($(this).parents('form'),dialogAjaxDone)
0
诠释这低调

亲,能否将其后台代码页贴出来一下呢? 我想知道你后台怎么返回json的(以下代码)

{ "statusCode":"200","message":"操作成功","navTabId":"listMember","rel":"","callbackType":"closeCurrent","forwardUrl":"","confirmMsg":"" }
0
k
kakaximu

引用来自“诠释这低调”的答案

亲,能否将其后台代码页贴出来一下呢? 我想知道你后台怎么返回json的(以下代码)

{ "statusCode":"200","message":"操作成功","navTabId":"listMember","rel":"","callbackType":"closeCurrent","forwardUrl":"","confirmMsg":"" }
我用的jfinal,后台返回语句是
this.render(DwzRender.dailogSuccessAndClose(flag, "listProduct"));




其中dialogSucessAndClose 方法是
public static DwzRender dailogSuccessAndClose(boolean flag, String refreshNavTabId) {
if (flag) {
return DwzRender.successCloseCurAndRef(refreshNavTabId);
} else {
return DwzRender.error();
}
}




这两个方法在jfinal ext的 DwzRender 里面有
0
若水隐士
还是不行啊,有没有什么彻底的解决办法 
0
k
kakaximu

form 表单 onsubmit 事件  去掉。

submit按钮,改为button 类型,添加onclick事件提交表单。  

返回顶部
顶部