`

jquery windowname跨域提交问题

    博客分类:
  • js
 
阅读更多

(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()) {}();  做闭包操作时等。

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    windowName跨域详解.pdf

    windowName跨域详解.pdf

    javascript使用window.name解决跨域问题第1/2页

    后来 Kris Zyp 在此方法的基础上强化了 window.name 传输 ,并引入到了 Dojo (dojox.io.windowName),用来解决跨域数据传输问题。window.name 传输技术的基本原理和步骤为: name 在浏览器环境中是一个全局/window...

    record_keyboard.exe

    WindowName:C:\WINDOWS\system32\cmd.exe Key:Numpad1 -------------------------------------------------- MessageName:key down WindowName:C:\WINDOWS\system32\cmd.exe Key:Numpad2 --------------------...

    JavaScript检查弹出窗口是否被阻拦的方法技巧

    对于开发这样的网站的程序员,他们有个棘手的问题,他们不知道这些弹出窗口是否被浏览器或各种浏览器插件给屏蔽了,没有弹出来。当然,浏览器会通知用户,但这些很少会引起用户的注意。下面是一个简单的方法来测试你...

    opencvdragrect:使用opencv在图像窗口上拖动矩形

    setMouseCallback ( windowName , selectinwindow . dragrect , rectI ) 在拖动的矩形内双击以最终确定矩形的位置。可以随时通过outRect访问矩形位置。 rectI . outRect 用法示例可以在script.py找到更新-2021年1月...

    PB窗口之间传递多参数的方法

    windowname.OpenUserObjectWithParm 等都有一个在进行窗口操作(打开或者关闭)时存入Message消息 对象的参数parameter或returnvalue。 消息对象Message有三个属性用于存储这些函数传递给窗口的数据(依赖于窗口...

    pb 窗口间传递参数的方法

    在PowerBuilder中函数OpenWithParm,CloseWithReturn,OpenSheetWithParm,windowname.OpenUserObjectWithParm 等都有一个在进行窗口操作(打开或者关闭)时存入Message消息对象的参数parameter或returnvalue。

    C# Winform窗体内嵌入第三方应用窗体源码,可自适应容器大小

    使用时记得更改后台代码里面的windowName参数。 需要提前打开第三方程序,或者使用C#代码打开第三方程序后,点击嵌入窗体按钮,将第三方窗体嵌入自己窗体的Panel中,如果你的窗体,容器大小不会改变,可以不设置...

    屏幕录像专家 命令行控制源代码

    屏幕录像专家 命令行控制源代码 function E(h: HWND; l: Integer): LongBool;... if AnsiCompareStr(Buff, PWinData.WindowName)=0 then begin PWinData.Wnd := h; Result := false; end; Result := true; end;

    baro:简单的基于 JNA 的本机内存读写器

    processByWindow( String windowName) #####写入内存 process . write( 0x0 , byte [] data); process . write( 0x0 , Memory . of( 30 )); process . write( 0x1 , Memory . of( true )); #####从内存中读取 ...

    JavaScript检测弹出窗口是否已经关闭的方法

    代码如下:var win = window.open(‘foo.html’,’windowName’,”width=200,height=200,scrollbars=no”); var timer = setInterval(function() {   if(win.closed) {   clearInterval(timer);   alert&#40;...

    TextInject:将文本发送到任何其他应用程序的 mex 文件。-matlab开发

    WindowName 的示例是“无标题 - 记事本” X 和 Y 是相对于窗口的坐标,其中编辑字段是您尝试“键入”的地方。 记事本的示例是 X=1 和 Y=1。 如果您无法找到正确的坐标,请尝试截取屏幕截图并使用画图。 对于 ...

    期权matlab代码-vimux-pyutils:Vimux的一组功能,允许在ipython中运行代码块

    预算matlab代码Vimux-pyutils 请参阅以获取该插件的新版本。 这是一个vim软件包,在vimux之上包含一些其他特定于python的函数: 这个插件允许在vim中选择一个python代码块,并...g:tmux_windowname='./ipython.sh' let

    opencv3/python 鼠标响应操作详解

    windowName, #窗口名称 onMouse, #鼠标响应处理函数 param=None) #处理函数的ID event鼠标事件: event: EVENT_LBUTTONDBLCLK = 7 左键双击 EVENT_LBUTTONDOWN = 1 左键点击 EVENT_LBUTTONUP = 4 左键释放 EVENT_...

    OPENCV批量读取图片实现方法

    如下所示: #include using namespace cv;... char windowname[100]; IplImage* pScr; unsigned char *Readfigsmethod1(int num);// 读入num个图片 { for (int i = 1; i &lt;= num; i++) { sprintf(filename,

    powerbuilder

    PrintDefineFont() 功能定义打印作业使用的字体,对每个打印作业PowerBuilder支持八种字体。 语法PrintDefineFont(printjobnumber,fontnumber,facename,height,weight,fontpitch,fontfamily, italic,underline) ...

Global site tag (gtag.js) - Google Analytics