(1)页面上引入jQuery.windowName.plugin.js文件,
(2)服务器返回的类型要做下包装成下面这样的样式:
<script>window.name='{"code":-1,"message":"非法提交"}'</script>
(3) ajax的回调函数里,要对返回值做eval处理,转成json对象
var data = eval("("+returnStr+")"); //转换为json对象
如一个示例:
$.post('${API_ROOT}/sendVerificationCode.jsp?act=getPassword&mobile=' + mobile + '&callback=windowname',function(returnStr){ var data = eval("("+returnStr+")"); //转换为json对象 if(data.code == 0){ $("#checkTips").empty(); $("#checkTips").html("验证码已发送到您绑定的手机<strong id='mobileNo' class='orange'>" + decodedMoile + "</strong>上,请在下方输入验证码"); setVerificationInvalid(); } else { showErrorTips(data.message); inableVerBut(); } });
如果不想对返回结果做eval处理;那post提交的方法要指明返回的结果类型如"json"(小写,不是大写JSON),并且参数顺序要严格一致,
w3c上,post方法的语法:
jQuery.post(url,data,success(data, textStatus, jqXHR),dataType)
如:
$.post("${API_ROOT}/mobile_bind.jsp?act=check&callback=windowname",{},function(data){ if(data.code != undefined) { if(data.code == 1){ $("#havebind").html(data.message ); $("#havebind").show(); } else { $("#unbind").show(); } } },"json");
此时不用对返回结果做eval处理;jquery会自动做转换成json对象。
另外:对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,怎样才能将json字符串转成json对象呢?方式不是太麻烦,就是将该字符串放于eval()中执行一次。这种方式也适合以普通javascipt方式获取json对象,以下举例说明:
var dataObj=eval("("+data+")");//转换为json对象
为什么要 eval这里要添加 “("("+data+")");//”呢?
原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将 括号内的表达式(expression)转化为对象,而不是作为语 句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始 和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]
对于这种写法,在JS中,可以到处看到。
如: (function()) {}(); 做闭包操作时等。