❶ 如何使用js或者$ajax进行跨域请求
CORS来解决跨域的问题
❷ Jquery AJAX跨域问题怎么解决
用JSONP可以实现ajax跨域访问:
jQuery.ajax({
url: 'http://192.168.1.xxx:8080/jsonp.action?arg=123',
type: 'GET',
dataType: "jsonp", // 注意dataType是jsonp
cache: false,
success: function(data){
alert(data.key); //这里就把你传入的123显示出来
}
});
不知道你后台用的是什么语言,如果是JAVA,可以像这样写:
public void jsonp() {
String arg = this.getRequest().getParameter("arg");
this.writeResponse("({key:'" + arg + "'})");
}
❸ 为什么有人说ajax不能跨域是什么意思 不是可以通过ajax跨域访问吗
嗯,就是说啊,ajax只能在自己的域下访问,比如在腾讯里面写的AJAX 是不能去访问网络里面的东西的,这就是跨域的!使用AJAX是需要服务器环境的,目前只有火狐浏览器不需要搭建环境,即可直接使用AJAX操作!
❹ AJAX跨域访问解决方法
IE9、Chrome、FF、Opera支持ResponseHeader Access-Control-Allow-Origin
IE下得额外配置:
jQuery.support.cors = true; (启用读取上面那个头信息的功能)
点击IE浏览器的的“工具->Internet 选项->安全->自定义级别”将“其他”选项中的“通过域访问数据源”选中为“启用”或者“提示”,点击确定就可以了。(自身的过滤)
❺ 如何解决ajax跨域问题
首先来看看在页面中如何使用jQuery的ajax解决跨域问题的简单版:
$(document).ready(function(){
var url='http://localhost:8080/WorkGroupManagment/open/getGroupById"
+"?id=1&callback=?';
$.ajax({
url:url,
dataType:'jsonp',
processData: false,
type:'get',
success:function(data){
alert(data.name);
},
error:function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}});
});
这样写是完全没有问题的,起先error的处理函数中仅仅是alert(“error”),为了进一步弄清楚是什么原因造成了错误,故将处理函数变 为上面的实现方式。最后一行alert使用为;parsererror。百思不得其解,继续google,最终还是在万能的stackoverflow找 到了答案,链接在这里。原因是jsonp的格式与json格式有着细微的差别,所以在server端的代码上稍稍有所不同。
比较一下json与jsonp格式的区别:
json格式:
{
"message":"获取成功",
"state":"1",
"result":{"name":"工作组1","id":1,"description":"11"}
}
jsonp格式:
callback({
"message":"获取成功",
"state":"1",
"result":{"name":"工作组1","id":1,"description":"11"}
})
看出来区别了吧,在url中callback传到后台的参数是神马callback就是神马,jsonp比json外面有多了一层,callback()。这样就知道怎么处理它了。于是修改后台代码。
后台java代码最终如下:
@RequestMapping(value = "/getGroupById")
public String getGroupById(@RequestParam("id") Long id,
HttpServletRequest request, HttpServletResponse response)
throws IOException {
String callback = request.getParameter("callback");
ReturnObject result = null;
Group group = null;
try {
group = groupService.getGroupById(id);
result = new ReturnObject(group, "获取成功", Constants.RESULT_SUCCESS);
} catch (BusinessException e) {
e.printStackTrace();
result = new ReturnObject(group, "获取失败", Constants.RESULT_FAILED);
}
String json = JsonConverter.bean2Json(result);
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.print(callback + "(" + json + ")");
return null;
}
注意这里需要先将查询结果转换我json格式,然后用参数callback在json外面再套一层,就变成了jsonp。指定数据类型为jsonp的ajax就可以做进一步处理了。
虽然这样解决了跨域问题,还是回顾下造成parsererror的原因。原因在于盲目的把json格式的数据当做jsonp格式的数据让ajax处理,造成了这个错误,此时server端代码是这样的:
@RequestMapping(value = "/getGroupById")
@ResponseBody
public ReturnObject getGroupById(@RequestParam("id") Long id,
HttpServletRequest request, HttpServletResponse response){
String callback = request.getParameter("callback");
ReturnObject result = null;
Group group = null;
try {
group = groupService.getGroupById(id);
result = new ReturnObject(group, "获取成功", Constants.RESULT_SUCCESS);
} catch (BusinessException e) {
e.printStackTrace();
result = new ReturnObject(group, "获取失败", Constants.RESULT_FAILED);
}
return result;
}
至此解决ajax跨域问题的第一种方式就告一段落。
❻ ajax跨域请求如何实现
方法一、 采用jsonp (只支持get请求,后端返回的jsonp格式json,后端无需做请求放行操作)
方式三: XHR2(XMLHttpRequest Level 2)
需要设置后端请求放行
response.setHeader(“Access-Control-Allow-Origin”,”*”);
response.setHeader(“Access-Control-Allow-Methods”,”GET,POST”);
1.可以获取服务器端的二进制数据。
2.可以友好的提交表单数据
3.可以上传文件(内置控制上传进度事件逻辑)
4.使用HTML表单来初始化一个FormData对象
❼ jquery ajax 跨域访问问题
jsonp可以传递get不可传递post,目前跨域只能是jsonp方式,虽然楼上说的都有理,但是归根到底还是没有解决 远程发送post数据到服务器的问题,目前我也没有找到合适的办法,不过如果客户端执行WEB脚本的话,在后台是可以发送post的,假如只是静态,目前没有别的办法
能做的只能尽量简化传输数据大小,采用jsonp的get方式
❽ jsp ajax如何跨域访问
jquery 的 jsonp是要有jsonpCallback属性的,如:
$.ajax(
url:"",
type:"post",
dataType:"jsonp",
jsonpCallback:"mycallback",
...,
success:function(){},error:function(){}
);
这个jsonpCallback服务器端要获取到,然后在返回的数据包在jsonpCallback中,如:
mycallback({"name":"德缘哥哥","gerden":"boy"})//当然这整个是字符串哦!