一、使用jsonp实现跨域请求

在前端开发这中你会发现,所有带src属性的标签都可以跨域访问其他服务器文件。jsonp实现的原理也是如此。

以jsonp的数据类型进行请求时,JQ会动态在页面中添加script标签,将请求内容放置到src中。

jsonp类型请求数据时,无法使用post方式(你会发现,在JQ中即使你将type设置为POST方式,JQ也会将其转换为get方式请求)。

jsonp方式请求不支持修改头部信息参数。服务器端数据返回也需要做相应的处理,返回的数据必须是一个JS代码。Jsonp请求时,设置jsonpCallback参数假设为reciver,服务器处理数据返回格式类似于reviver('datas need retun '),请求成功后,会自动调用前端reciver方法。

JQ前端请求代码:

  1. $.ajax({
  2. type: "get",
  3. async: false,
  4. url: "http://192.168.2.229:8081/api/web_search_directnew.html",
  5. dataType: "jsonp",
  6. jsonpCallback: "receive", //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
  7. success: function(data) {
  8. console.log(data)
  9. },
  10. error: function() {
  11. alert('fail');
  12. }
  13. });
  14. function receive(data){
  15. }

java后台代码:

  1. def index() {
  2. def a = [:]
  3. a.name = "张小白"
  4. a.age = 12
  5. a.sex = '男'
  6. a = a as JSON
  7. render params.callback + "('" + a + "')"
  8. }

二、Access-Control-Allow-Origin

服务器端在返回资源的时候,指定这个资源能被哪些域所访问。如response.addHeader( "Access-Control-Allow-Origin", "http://192.168.2.229:8020" );指定http://192.168.2.229:8020可以进行跨域访问该资源,若不限制,则改成*

浏览器限制:Chrome 3+,Firefox 3.5+,Opera 12+,Safari 4+,IE 8+

js代码:

  1. $.ajax({
  2. url: "http://192.168.2.229:8091/myTest/hellow/index",
  3. type: "POST",
  4. crossDomain: true,
  5. dataType: "json",
  6. success: function(result) {
  7. alert(JSON.stringify(result));
  8. },
  9. error: function(xhr, status, error) {
  10. alert(status);
  11. }
  12. });

服务器:

response.addHeader( "Access-Control-Allow-Origin", "http://192.168.2.229:8020" )

我自己尝试之后的代码,可供参考:

js代码

	function sub(){
var uname = $("#uname").val();
var upass = $("#upass").val();
var url = "/system/do_login1.htm";
$.ajax({
type: "POST",//请求方式
url: url,
dataType:"jsonp",
jsonp:"jsonpCallback",

data: {
"uname": uname,
"upass": upass
},
success : function(msg) {
alert(msg) },
});
}

 后台代码

@RequestMapping("/system/do_login1.htm")
public void isUser(HttpServletRequest request,HttpServletResponse response,
ModelMap map,String uname,String upass) throws Exception{
TSysUser sysUser = sysUserManager.getSysUserByLogin(uname, upass);
Gson gson = new Gson();
String jsonpCallback = request.getParameter("jsonpCallback");
if(sysUser != null){
String massage = "验证成功"; response.getWriter().print(jsonpCallback+"("+gson.toJson(massage)+")");
}else{
String massage = "用户名或密码错误"; response.getWriter().print(jsonpCallback+"("+gson.toJson(massage)+")");
}
}

  

ajax实现跨域访问的两种方式的更多相关文章

  1. System.Web.Http.Cors配置跨域访问的两种方式

    System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...

  2. Ajax实现跨域访问的两种方法

    调程序时遇到"已拦截跨源请求:同源策略禁止读取位于--的远程资源",这是因为通过ajax调用其他域的接口会有跨域问题. 解决方法如下: 方法一:服务器端(PHP)设置header头 ...

  3. Ajax实现跨域访问的三种方法

    转载自:http://www.jb51.net/article/68424.htm 一.什么是跨域 我们先回顾一下域名地址的组成: http:// www . google : 8080 / scri ...

  4. 解决Entity Framework查询匿名对象后的跨域访问的一种方式

    在Entity Framework中,可以使用lambda表达式进行对数据的查询,而且可以将查询结果直接映射为对象或者对象列表,这极大的提高的开发速度,并且使数据层的数据更加方便处理和传递.但是很多时 ...

  5. WEX5中ajax跨域访问的几种方式

    1.使用jsonp方式 使用jsonp访问的话,前端需要把回调函数名传递给后端,后端执行完后也需要把回调函数传回给前端,默认情况下ajax自动生成一个回调函数名,后端可以通过String callba ...

  6. 【js跨域】js实现跨域访问的几种方式

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  7. jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque

    问题: XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present ...

  8. ajax实现跨域访问

    ajax跨域访问是一个老生畅谈的问题啦,网上解决方法很多,discuz用的p3p协议,有兴趣的朋友可以了解下,比较常用的是JSONP方法,貌似目前这种方法只支持GET方式,不如POST方式安全. 即使 ...

  9. ajax的data传参的两种方式

    ajax的data传参的两种方式 本文为转载. 1.[javascript] view plain copy /** * 订单取消 * @return {Boolean} 处理是否成功 */ func ...

随机推荐

  1. C#将.spl剥离成.emf文件格式

    本文转载自 星战紫辉 http://www.cppblog.com/rawdata/archive/2009/02/23/74653.html 但C#代码实现为本人原创.https://github. ...

  2. MySQL数据库学习三 数据库对象和基本操作

    3.1 数据库和数据对象 1. 系统数据库 information_schema:主要存储系统中的一些数据库对象信息,如用户列表信息.列信息.权限信息.字符集信息和分区信息等. performance ...

  3. AngularJS复习------表单验证

    在AngularJS中能够将HTML5表单验证功能同自己的验证指令结合起来使用,这里介绍使用的核心功能. 使用表单验证,首先要确保表单的每个控件都有name属性 如果想要屏蔽浏览器对表单的默认验证行为 ...

  4. npm scripts 使用指南

    转载自:http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html Node 开发离不开 npm,而脚本功能是 npm 最强大.最常用的功能之一. ...

  5. SSE(Server-sent events)技术在web端消息推送和实时聊天中的使用

    最近在公司闲着没事研究了几天,终于搞定了SSE从理论到实际应用,中间还是有一些坑的. 1.SSE简介 SSE(Server-sent events)翻译过来为:服务器发送事件.是基于http协议,和W ...

  6. 【SSH/SFTP】SSH协议和SFTP

    [SSH和SFTP] ■ 设置一个只允许访问部分目录的SFTP服务器 由于SSH和SFTP之间的紧密联系,一个SFTP服务器必然会导致开放一定的SSH服务,而SSH的风险显然比SFTP要大一些.自然, ...

  7. 【CSS】 CSS的一些应用实例和参考

    css 一些应用实例 基本抄自http://www.w3school.com.cn/css/css_align.asp ..把这些知识消化吸收然后以自己的话来解释一下 ■ 对齐 ●  用margin属 ...

  8. 在Anacoda中管理多个版本Python

    win10. 在cmd窗口中输入 conda info --envs 或者 conda env list 查看已经安装的环境,当前活动的环境前会加*号. 在cmd窗口(终端窗口)或anaconda p ...

  9. mysqldump 备份脚本

    #!/bin/bash DUMP=/usr/bin/mysqldump OUT_DIR=/home/mysql LINUX_USER=root DB_NAME=snale DB_USER=root D ...

  10. easyUi五个常用插件

    1.对话框(Dialog) 对话框(dialog)是一个特殊类型的窗口,它在顶部有一个工具栏,在底部有一个按钮栏.默认情况下,对话框(dialog)只有一个显示在头部右侧的关闭工具.用户可以配置对话框 ...