jquery windowname跨域提交问题

(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对象

Red rose为什么要 eval这里要添加 “("("+data+")");//”呢?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将 括号内的表达式(expression)转化为对象,而不是作为语 句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始 和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]

对于这种写法,在JS中,可以到处看到。

如: (function()) {}();  做闭包操作时等。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值