ajax实现跨域访问的两种方式
一、使用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前端请求代码:
- $.ajax({
- type: "get",
- async: false,
- url: "http://192.168.2.229:8081/api/web_search_directnew.html",
- dataType: "jsonp",
- jsonpCallback: "receive", //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
- success: function(data) {
- console.log(data)
- },
- error: function() {
- alert('fail');
- }
- });
- function receive(data){
- }
java后台代码:
- def index() {
- def a = [:]
- a.name = "张小白"
- a.age = 12
- a.sex = '男'
- a = a as JSON
- render params.callback + "('" + a + "')"
- }
二、Access-Control-Allow-Origin
浏览器限制:Chrome 3+,Firefox 3.5+,Opera 12+,Safari 4+,IE 8+
js代码:
- $.ajax({
- url: "http://192.168.2.229:8091/myTest/hellow/index",
- type: "POST",
- crossDomain: true,
- dataType: "json",
- success: function(result) {
- alert(JSON.stringify(result));
- },
- error: function(xhr, status, error) {
- alert(status);
- }
- });
服务器:
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实现跨域访问的两种方式的更多相关文章
- System.Web.Http.Cors配置跨域访问的两种方式
System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...
- Ajax实现跨域访问的两种方法
调程序时遇到"已拦截跨源请求:同源策略禁止读取位于--的远程资源",这是因为通过ajax调用其他域的接口会有跨域问题. 解决方法如下: 方法一:服务器端(PHP)设置header头 ...
- Ajax实现跨域访问的三种方法
转载自:http://www.jb51.net/article/68424.htm 一.什么是跨域 我们先回顾一下域名地址的组成: http:// www . google : 8080 / scri ...
- 解决Entity Framework查询匿名对象后的跨域访问的一种方式
在Entity Framework中,可以使用lambda表达式进行对数据的查询,而且可以将查询结果直接映射为对象或者对象列表,这极大的提高的开发速度,并且使数据层的数据更加方便处理和传递.但是很多时 ...
- WEX5中ajax跨域访问的几种方式
1.使用jsonp方式 使用jsonp访问的话,前端需要把回调函数名传递给后端,后端执行完后也需要把回调函数传回给前端,默认情况下ajax自动生成一个回调函数名,后端可以通过String callba ...
- 【js跨域】js实现跨域访问的几种方式
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- 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 ...
- ajax实现跨域访问
ajax跨域访问是一个老生畅谈的问题啦,网上解决方法很多,discuz用的p3p协议,有兴趣的朋友可以了解下,比较常用的是JSONP方法,貌似目前这种方法只支持GET方式,不如POST方式安全. 即使 ...
- ajax的data传参的两种方式
ajax的data传参的两种方式 本文为转载. 1.[javascript] view plain copy /** * 订单取消 * @return {Boolean} 处理是否成功 */ func ...
随机推荐
- WebGL 3D 电信机架实战之数据绑定
前言 在前端中,视图层和数据层需要进行单向或者双向数据绑定,大家都已经不陌生了,有时候 2D 做的比较顺了之后,就会想要挑战一下 3D,不然总觉得痒痒的.这个 3D 机架的 Demo 我觉得非常有代表 ...
- leetCode:206 反转链表
206. 反转链表 题目:反转一个单链表. 进阶:链表可以迭代或递归地反转.你能否两个都实现一遍? 非递归代码: class Solution { public ListNode reverseLis ...
- Redis登录密码设置
1. 更改Redis.conf配置 # requirepass foobared 去掉注释,foobared改为 自己的password , 我测试的时候用的是默认的 foobared 2.启动red ...
- 数据库 --> sqlite3之api使用
创建 if [ ! -d /opt/dbspace ] then mkdir /opt/dbspace fi if [ -f /opt/dbspace/.memo.db ] then rm /opt/ ...
- 《UNIX网络编程 卷1:套接字联网API》读书笔记(一):网络编程简介
概述 要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议.大多数网络是按照划分成客户和服务器来组织的.本章及后续章节的焦点是TCP/IP协议族,也可称为网际协议族.下图为客户与服务器 ...
- 痛吻过YY寻找到真爱的三非渣本春招之路
写下这篇文章可能就不是大家乐于见闻的面经了,更多是深入一些面试细节. 前言 我猜拿到了BAT等一线互联网公司Offer的小伙伴或者那些老鸟看到这条标题的时候会不屑一顾,认为YY这种级别的公司是属于二线 ...
- 查看http的并发请求数与其TCP连接状态
[root@new-web7 ~ ::]#netstat -na | awk '/^tcp/ {++S[$NF]} END {for(i in S) print i, S[i]}' TIME_WAIT ...
- C#之字符串
1 Replace string sayHello = "Hello World!"; Console.WriteLine(sayHello); sayHello = sayHel ...
- Python中的SQLAlchemy
在Python中,使用SQLAlchemy可以对数据库进行操作. SQLAlchemy是Python中的一个标准库. 要使用SQLAlchemy,首先要创建连接: url = mysql+pymysq ...
- Django+xadmin打造在线教育平台(十)
十四.xadmin的进阶开发 14.1.权限管理 (1)用户权限 超级用户拥有所有权限,其它添加的用户默认没有任何权限 进后台添加一个用户“Editor1”,勾上“职员状态”后,这个用户才可以登录进后 ...