ajax跨域请求

版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_27512271/article/details/84673163
1、概要:
    ajax请求是非常容易而且方便的,但是有时候我们会遇到一个跨域的问题,那就是Ajax请求的url不是本地或者同一个服务器下面的URI,最后导致虽然请求200,但是不会返回任何数据,事实上简单来说请求同一个域名下的url或者说用不带http的绝对路径和相对路径请求是没有任何问题的,如果请求外部资源,那么这就称为跨域请求。
    跨域问题的来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS或jquery中的ajax,html本身没有跨域问题。
    ajax跨域请求与普通请求处理差别较大,下面我们就详细的介绍一下。
2、发送请求端处理方法:
    ajax实现跨域常用的方式是用JSONP跨域,JSONP是JSON with Padding的略称。它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

$.ajax({
     type:"get",    //请求方式,跨域请求方式必须get方式。
     async:false,    //是否异步,一般设置为false即为同步。
     url:"跨域请求路径",
     dataType:"jsonp",    //跨域json请求一定是jsonp
     jsonp: "callbackparam",    //跨域请求的参数名,默认是callback
     //jsonpCallback:"successCallback",    //自定义跨域参数值,回调函数名也是一样,默认为jQuery自动生成的字符串
     data:{"querys":"querydata"},    //请求参数
     beforeSend: function() {
         //请求前的处理
     },
     success: function(data) {
         //请求成功处理,和本地回调完全一样
    },
     complete: function() {
         //请求完成的处理
     },
    error: function() {
        //请求出错处理
     }
 });

3、接收请求端处理方法:
    本文接收请求端处理方法的实例是在Java springmvc中的,其他的也是类似的处理方式,本文就不在一一举例了。

@RequestMapping(params = "dJsonp")
@ResponseBody 
public String dJsonp(HttpServletRequest request,HttpServletResponse response,String callback) {
      String dJson="";
      response.setHeader("Access-Control-Allow-Origin","*");/**设置响应头允许ajax跨域访问**/
      response.setHeader("Access-Control-Allow-Methods","GET,POST");/*星号表示所有的异域请求都可以接受,*/
      response.setCharacterEncoding("UTF-8");//设定编码 
      response.setContentType("application/json");//表示是json类型的数据
      String querys=request.getParameter("querys");
	/**
	 此处是请求处理操作
       */
      dJson=callback+"({\"bool\":\"true\",\"state\":\"0\"})";
      PrintWriter out= response.getWriter();
      out.print(dJson);
    } catch (IOException e) {
      // TODO Auto-generated catch block
	e.printStackTrace();
   }
    return null; 
 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值