一、使用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. 3.21电脑重装“operation not found system ”和xp分盘”分配表有标记为已使用的未用簇”

    问题一.是用光盘重装系统后重启,提示operation not found system ①考虑是系统问题,没装好,还是引导文件丢失;换新盘装,若还是一样; ②分析认为是分区问题,必须是活动分区+主分 ...

  2. EOS 上线前,先搞懂这两个基本概念

    如果你曾经尝试在本地运行 EOS 测试节点,会发现编译.运行并不是特别复杂,但官方教程里两个概念很容易把人搞晕: Account(账户)和 Wallet (钱包). EOS 的 Wallet 跟其他区 ...

  3. 第三方工具 - echarts中 设置x||y轴文案、提示文字等为固定字数,超出显示"..."

    起初看到这种需求的时候,我是这个状态 对,我是拒绝的,人家echats画出来就是一个canvas,你让我怎么加... 但是,作为一个"有点追求的"前端,我得想招试试总结下来,唯一的 ...

  4. 零散Linux命令

    1. # ps -ef|grep java 查询java进程 2. # kill -9 进程号 关闭指定进程

  5. eclipse报错排解

    一.解决eclipse中git插件中的cannot open git-upload-pack问题 有时候在eclipse上使用插件egit向github或者osc上同步代码时,有时候会发现出现cann ...

  6. java安全框架shiro(一)

    第一个简单的案例 ,通过读取.ini文件的方式模拟登陆, 1.通过Factory工厂的getInstance()方法来获取SecurityManager的实例,实例化Factory需要一个ini文件的 ...

  7. 聊一聊JS的原型链之高级篇

    首先呢JS的继承实现是借助原型链,原型链即__proto__形成的链条. 下面一个例子初步认识下原型链: function Animal (){ } var cat = new Animal() 我们 ...

  8. Dijkstra算法 Java实现

    public class Dijkstra { private static int N = 1000; private static int[][] Graph = { { 0, 1, 5, N, ...

  9. 数据库MySQL、redis主从切换shell脚本

    具体源码可找我领取

  10. STL --> remove和remove_if()

    remove和remove_if() 一.Remove()函数 remove(beg,end,const T& value) //移除区间{beg,end)中每一个“与value相等”的元素: ...