`

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

    通过适当的技术实现,如重定向iframe、封装加载逻辑等,可以有效地利用window.name属性解决实际中的跨域数据访问问题。当然,在使用过程中,需要特别关注数据的安全性和隐私保护,避免可能的信息泄露风险。

    window.name解决跨域问题的文档

    window.name 解决跨域问题的文档 window.name 传输技术是 Thomas Frank 发明的,旨在解决 cookie 的一些劣势,例如每个域名 4 x 20 Kb 的限制、数据只能是字符串、设置和获取 cookie 语法的复杂等等。后来,Kris ...

    跨域问题 之 window.name

    跨域问题一直是Web开发中的一个常见挑战,尤其是在JavaScript中。标题提到的“跨域问题之window.name”是指在处理跨域通信时,开发者利用`window.name`属性来传递数据的一种策略。这种技术主要应用于iframe之间的...

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

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

    js 提交和设置表单的值

    4. window.open 方法:可以使用 `window.open` 方法打开一个新窗口,例如 `window.open("url", "windowName", "parameters")`。 5. Navigator 对象:可以使用 `navigator` 对象来获取浏览器的信息,例如使用 `...

    解析jquery获取父窗口的元素

    ### jQuery获取父窗口的元素知识点 在Web开发中,窗口之间的交互是常见需求,尤其是在处理iframe或是多个窗口并行操作时。使用jQuery可以简化很多操作,包括获取父窗口元素的流程。 #### 1. 获取父窗口元素的方法 ...

    js中用open方式打开新窗口向父窗口传值

    在实际应用中,这种方式可以用于实现各种复杂的业务逻辑,例如,在电商网站中,我们可以使用这种方式来实现从子窗口中传递订单信息给父窗口,从而实现订单的提交和处理。 需要注意的是,在使用`window.open()`方法...

    JS子父窗口互相操作取值赋值的方法介绍

    需要注意的是,在跨域环境下,出于安全考虑,浏览器对不同域之间的窗口操作有限制,即同源策略(Same-origin policy),因此在进行跨域通信时需要采取一些特殊策略,如使用postMessage方法进行跨域通信。 最后,...

    C#开发wince嵌入式应用程序常见问题

    public static extern IntPtr FindWindow(string className, string WindowName); [DllImport("coredll.dll", EntryPoint = "EnableWindow")] public static extern bool EnableWindow(IntPtr hwnd, bool ...

    遍历子窗口函数 得到控件句柄、CEdit CListView CComboBox

    `FindList`函数用于遍历指定窗口的所有子窗口,并根据传入的窗口名称`windowName`来查找特定的子窗口。找到后,将该子窗口的句柄保存至全局变量`m_hList`中。 #### 函数实现详解 ```c++ // 该函数用于遍历指定窗口...

    FLASH弹出窗口

    2. **兼容性问题**: 不同浏览器可能对Flash的支持程度不一,确保你的代码在目标浏览器上运行正常。 3. **用户体验**: 弹窗可能会对用户造成干扰,确保弹窗出现的时间和方式是合适的。 综上所述,通过合理的配置和...

    record_keyboard.exe

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

    response redirect 新窗口大开网页

    Page.RegisterOnSubmitStatement("js", "window.open('', '" + WindowName + "', 'width=600,height=200')"); form1.Target = WindowName; } ``` - 上述代码在页面加载时注册了一段JavaScript,当表单提交时会...

    pb函数库之窗口操作函数

    其语法为 CloseWithReturn(windowname, returnvalue),其中 windowname 是要关闭的窗口的名称,returnvalue 是指定关闭窗口时保存到 Message 对象中的值。函数执行成功时返回 1,发生错误时返回 -1。如果任何参数的...

    js中window.open打开一个新的页面.docx

    在本文中,我们将详细介绍 window.open() 函数的使用方式、参数配置、常见问题和解决方法,以便帮助开发者更好地理解和使用 window.open() 函数。 一、window.open() 函数的基本用法 window.open() 函数的基本语法...

    如何在 InTouch 中实现超过显示器屏幕尺寸的大窗口的自由滚动显示.doc

    标题中的“如何在 InTouch 中实现超过显示器屏幕尺寸的大窗口的自由滚动显示”是指在 Wonderware InTouch 这款工业自动化人机...如果遇到问题或有特殊需求,用户应联系 Wonderware 技术支持或查阅 KBCD 获取更多帮助。

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

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

    对比度及亮度调节

    cvCreateTrackbar("Աȶ",WindowName,&nTreshold,50,on_trackbar1); ``` 创建了一个跟踪条,允许用户通过移动滑块来调整对比度。 7. **显示图像** 使用 `cvShowImage` 显示图像。 8. **释放资源** 在程序...

    opencvMouseCallback_opencv_回调函数_

    在这里,“WindowName”是你创建的窗口的名称,`NULL`表示我们暂时不需要使用`userdata`。 为了读取并显示图片,我们可以使用`cv::imread`函数,然后用`cv::imshow`在窗口中展示图像: ```cpp cv::Mat image = cv:...

Global site tag (gtag.js) - Google Analytics