Ajax方式提交表单:
<script language="javascript">
function submit(){
$.ajax({
type:"post",
data:"$('表单id').serialize()",
url:"verify.action",
cache:false,
dataType:"text",
success:function(data){
if(data != ''){
alert(data);
}
}
});
}
返回data数据时,后台应使用:
(需要特别注意data的编码格式,应与页面保持一致)
** response.setContentType("text/html;charset=GBK");
Printwriter out = response.getWriter();
out.print("返回到前台的数据");
out.flush;
out.close;
dataType为"text"时,若后台传来json格式的字符串,可以使用eval("(" + data + ")")将字符串转换为json对象。
如果data是字符串,使用eval("(" + data + ")")和JSON.parse(data)的功能一样,如果data是json对象,使用eval("(" + data + ")")会报错,因为eval一个json对象并没用什么用,这个时候不需要使用eval方法,直接使用data即可。
另外为什么eval内要添加括号呢?
原因:eval本身的问题。由于json是以{ }的方式开始及结束的,在js中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。加上括号的目的是迫使eval函数在处理JavaScript代码时强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。
eval("{ }") //undefined
eval("({ })") //object[Object]
eval()和JSON.parse()的区别
我们将一个字符串解析成json对象时可以使用两种方法:
假设我们有一个json格式的字符串:
'{
"student" : [
{"name":"鸣人","age":17},
{"name":"小樱","age":17},
{"name":"佐助","age":17}
]
}'
然后我们需要把它解析成json对象
1、eval()代码如下:
var data = '{"student" : [{"name":"鸣人","age":17}, {"name":"小樱","age":17},{"name":"佐助","age":17}]}';
eval('(' + data + ')');
2、JSON.parse()代码如下:
var data = '{"student" : [{"name":"鸣人","age":17}, {"name":"小樱","age":17},{"name":"佐助","age":17}]}';
JSON.parse(data);
区别:eval方法不会去检查给的字符串时候符合json的格式,同时如果给的字符串中存在js代码eval也会一并执行,比如如果上面的json格式的字符串改为:(注意alert部分)
var data = '{"student" : [{"name":"鸣人","age":17}, {"name":"小樱","age":alert("hehe")},{"name":"佐助","age":17}]}';
此时执行eval方法后会先弹出一个提示框输出hehe的字符串。
但是使用JSON.parse()就会报错,显示错误信息为当前字符串不符合json格式,即JSON.parse()方法会检查需要转换的字符串是否符合json格式
相比较而言eval方法是很危险的,特别是当涉及到第三方时我们需要确保传给eval的参数是我们可以控制的,不然里面插入比如window.location指向一个恶意的连接,那就叫天啦
从这个层面讲~还是推荐使用JSON.parse来实现json格式字符串的解析