ajax跨域访问及其解决方案

用ajax方式请求别的网站,就会发生跨域请求问题,

XMLHttpRequest cannot load http://google.com/.
No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.
Origin ‘http://run.jsbin.io‘ is therefore not allowed access.

编一个服务器端servlet测试一下

    @RequestMapping("/haha")
    @ResponseBody
    String haha(String haha, HttpServletRequest req, HttpServletResponse resp) {
        //resp.addHeader("Access-Control-Allow-Origin", "null");
        System.out.println(haha);
        System.out.println("you accessed!!!");
        return haha + " : " + req.getMethod();
    }

我用的是spring mvc,如果RequestMapping不带参数,默认为‘/‘,如果请求找不到,那就去找它.

无参数的RequestMapping只允许有一个,否则无法部署,报错.

在spring mvc中,如果没有规定请求方式,默认是都可以,无论是get还是post都能够找到资源,只要url正确就行.

下面用ajax请求这个servlet

<body>
    <h1 id=‘resp‘></h1>
        <input id=‘haha‘ type=‘text‘></input>
</body>
<script type="text/javascript">
    $(‘#haha‘).keydown(function(event) {
        console.log(event.which)
        if(event.which==13){
            $.get(‘http://localhost:8080/news/haha‘,{‘haha‘:‘wyf‘},function(data){
                console.log(data)
                console.log(‘get over‘)
            })
        }
    });
</script>

服务器端输出了"you succeed!!!",这说明对于跨域请求服务器是搭理了的,问题出在服务器禁止返回或者是浏览器不允许用户查看返回的内容.

据我猜测,很有可能是后者,即:chrome分析返回结果,发现跨域了,于是不让用户看了.

解决方案很简单:编一个表单进行提交,因为只有ajax才存在跨域访问问题,而提交表单跟ajax不一样.

提交表单之后服务器端决定了浏览器端页面的跳转,把权力完全交给了服务器,而ajax只是通过服务器获取数据

下面的表单是可以提交成功的

    <form action=‘http://localhost:8080/news/haha‘ method="GET">
        <input id=‘haha‘ type=‘text‘></input>
        <input type="submit"></input>
    </form>

可是填写表单太麻烦,于是可以虚拟表单并提交

    $(document).ready(function(){
        var form=$(‘<form></form>‘)
        $(form).attr({"action":‘http://localhost:8080/news/haha‘,"method":‘post‘}).append("<input name=‘haha‘ value=‘haha weidiao‘>")
        $(form).submit()
        console.log(‘haha‘)
    })
时间: 2024-10-27 11:36:09

ajax跨域访问及其解决方案的相关文章

No &#39;Access-Control-Allow-Origin&#39; Ajax跨域访问解决方案

No 'Access-Control-Allow-Origin' header is present on the requested resource. 当使用ajax访问远程服务器时,请求失败,浏览器报如上错误.这是出于安全的考虑,默认禁止跨域访问导致的. 一.什么是跨域访问 举个栗子:在A网站中,我们希望使用Ajax来获得B网站中的特定内容.如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题.你可以理解为两个域名之间不能跨过域名来发送请求或者请求数据,否则就是不安全的.跨域访问违反

[转]No &#39;Access-Control-Allow-Origin&#39; header is present on the requested resource.&#39;Ajax跨域访问解决方案

原 https://blog.csdn.net/zhoucheng05_13/article/details/53580683 No 'Access-Control-Allow-Origin' header is present on the requested resource. 什么是跨域访问 举个栗子:在A网站中,我们希望使用Ajax来获得B网站中的特定内容.如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题.你可以理解为两个域名之间不能跨过域名来发送请求或者请求数据,否则就是不安

Web Api 2(Cors)Ajax跨域访问

支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示 随着深入使用ASP.NET Web Api,我们可能会在项目中考虑将前端的业务分得更细.比如前端项目使用Angularjs的框架来做UI,而数据则由另一个Web Api 的网站项目来支撑.注意,这里是两个Web网站项目了,前端项目主要负责界面的呈现和一些前端的相应业务逻辑处理,而Web Api则负责提供数据. 这样问题就来了,如果前端通过ajax访问Web Api项目话,就涉及到跨域了.我们知道,如果直接访问,

浅析JSONP-解决Ajax跨域访问问题

浅析JSONP-解决Ajax跨域访问问题 很久没有写随笔了,总是感觉没时间,其实时间就是...废话少说,前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问题了,后台服务调用没有响应,怎么回事?代码没怎么改动,唯一修改的地方就是jQuery的ajax方法中的url地址.难道是这里的问题,经过检查和调试,发现原来是同源策略在作怪,我们知道,JavaSc

CXF发布支持ajax跨域访问的restful webservice

用apache cxf构建了一个玩具型restful webservice,内嵌jetty,加上gradle,发布无比轻松. apply plugin: 'java' apply plugin: 'application' repositories { maven { url "http://maven.oschina.net/content/groups/public" } } [compileJava,compileTestJava,javadoc]*.options*.encod

PHP Ajax 跨域问题最佳解决方案 【摘自菜鸟教程】

PHP Ajax 跨域问题最佳解决方案 分类 编程技术 http://www.runoob.com/w3cnote/php-ajax-cross-border.html 本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com. 如果直接使用ajax访问,会有以下错误: XMLHttpRequest cannot load http://server.runoob.co

Access-Control-Allow-Origin:ajax 跨域访问

在使用jquery的$.ajax跨域访问的时候,如客户端域名是www.test.com,而服务器端是www.test2.com,在客户端通过ajax访问服务器端的资源将会报跨域错误: XMLHttpRequest cannot load http://www.test2.com/test.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://www.test

Jetty Cross Origin Filter解决jQuery Ajax跨域访问的方法

当使用jQuery Ajax post请求时可能会遇到类似这样的错误提示 XMLHttpRequest cannot oad http://xxxxxx. Origin http://xxxxxx is not allowed by Access-Control-Allow-Origin. 这是Ajax跨域访问权限的问题,服务器端不接受来自另一个不同IP地址的由脚本文件发出的http请求.解决这个问题需要在服务器端进行配置使服务器端可以接受来自不同域的脚本文件的http请求.一个简单的解决方法是

ajax跨域访问限制的突破

ajax跨域访问会遇到这个异常: XMLHttpRequest cannot load http://10.43.15.23/hnsh/rest/waterInfo/getRiverInfo.do. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. 通常的做法是用服