zoukankan      html  css  js  c++  java
  • PHP ajax跨域问题最佳解决方案

    一、本文通过设置Access-Control-Allow-Origin来实现跨域。

    例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com。

    如果直接使用ajax访问,会有以下错误:

    XMLHttpRequest cannot load http://server.runoob.com/server.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://client.runoob.com' is therefore not allowed access.

    1、允许单个域名访问

    指定某域名(http://client.runoob.com)跨域访问,则只需在http://server.runoob.com/server.php文件头部添加如下代码:header('Access-Control-Allow-Origin:http://client.runoob.com');

    2、允许多个域名访问

    指定多个域名(http://client1.runoob.com、http://client2.runoob.com等)跨域访问,则只需在http://server.runoob.com/server.php文件头部添加如下代码:
    $origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';  
      
    $allow_origin = array(  
        'http://client1.runoob.com',  
        'http://client2.runoob.com'  
    );  
      
    if(in_array($origin, $allow_origin)){  
        header('Access-Control-Allow-Origin:'.$origin);       
    }

    3、允许所有域名访问

    允许所有域名访问则只需在http://server.runoob.com/server.php文件头部添加如下代码:header('Access-Control-Allow-Origin:*');

     

    二、Ajax发起JSONP跨域请求

    我们通过jQuery的JSONP方式可以实现跨域ajax请求,服务端php也需要做出相应的处理,也就是说php这边必须和前端页面按照一定的格式请求和返回数据。

    示例:前端页面发起JSONP请求:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $.ajax({
      type: "get",
      data: "random="+Math.random(),
      dataType: "jsonp",
      jsonp: "callback",
      success: function(data) {
       console.log(data);
      },
      error: function() {
       console.log('Request Error.');
      }
    });

    我们会发现,ajax请求参数中有 dataType: "jsonp" 和 jsonp: "callback" ,这个就表明了我要请求的是jsonp,并且会有回调callback返回。当然,我们也可以自定义回调函数,如 jsonpCallback:"success_jsonpCallback"

    还可以简单的写成:

    1
    2
    3
    4
    5
    jQuery.getJSON('http://demo.jb51.net/phpajax/jsonp.php?callback=?",{
     random: Math.random()
    }, function(data){
     console.log(data);
    });

    php后端服务代码可以这样写(注意输出返回的格式):

    1
    2
    3
    4
    5
    $data = array(
      'rand' => $_GET['random'],
      'msg' => 'Success'
    );
    echo $_GET['callback'].'('.json_encode($data).')';
    
    
     
  • 相关阅读:
    docker安装和hub
    sql获取时间、年龄
    在eclipse中配置Tomcat时,出现“Cannot create a server using the selected type”的错误。
    ajax简单做html查询删除(鲜花)
    java使用jsp建立项目+视频
    java根据数据库自动生成代码
    java连接数据库增删改查公共方法
    制作二维码java
    富文本编译器
    java字符串类型和时间类型的转换
  • 原文地址:https://www.cnblogs.com/missphp/p/9253877.html
Copyright © 2011-2022 走看看