zoukankan      html  css  js  c++  java
  • php中ajax跨域请求---小记

    php中ajax跨域请求---小记

     

    前端时间,遇到的一个问题,情况大约是这样:

    原来的写法:

    前端js文件中:

    $.ajax({

      type:'get',

      url:'http://wan.xxx.com/xxx.js',

      success:function(data){

      .........  

      }

    })

    很简单的一个ajax请求;后面在做迁移的时候,由于系统目录的安排,js文件放到了,img.xxx.com域名下,这样就设计到了跨域问题,于是就改成了这样:

    $.ajax({

      type:'get',

      url:'http://img.xxx.com/xxx.js',

      dataType:'jsonp',

      success:function(data){

      .........  

      }

    })

    用jsonp的形式,跨域请求,这本来没有什么,很简单的,可这样请求后,就是得不到数据,不知道大家能不能看出问题所在?

    跨域请求嘛,就是 dataType用jsonp的格式就对了,可就是不行。。。

    后面想了一会,依然无解,后经过同学的帮助,才知道是这个问题:

    跨域请求,需要有一个callback的回调函数,可是上边请求的url中,虽然是请求的另一个域中的文件,可并没有回调函数(请求的是另个域中的js文件,并没有回调函数);

    所以,解决方法也就是,通过后台程序,写个回调函数即可,而要求必须要请求那个js文件得到json数据,

    所以需要后台的方法代理一下请求,从而实现要求,就是做一个后台的代理

    所以修改方法如下:

    js文件中:

    $.ajax({

      type:'get',

      url:'http://test.com/1.php', //请求的后台代理文件

      data:'url=http://img.xxx.com/xxx.js', //传递请求的js地址

      dataType:'jsonp',

      success:function(data){

      ........

      }

    })

    后台代理文件中:

    1.php

    url=_REQUEST[url];

    $ch=curl_init();

    curl_setopt(ch,CURLOPTURL,url);

    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

    curl_setopt($ch,CURLOPT_TIMEOUT_MS,200);

    data=curlexec(ch); //$data即为请求传递过来的url得到的json数据

    curl_close($ch);

    echo _REQUEST['callback'].."('{data}');";

    这样就可以实现功能,只不过多了一步后台代理的步骤;

    顺便记一下:

    ajax中的跨域的几个参数:

    jsonp           String

    在一个jsonp请求中重写回调函数的名字。这个值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,比如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。

    jsonpCallback      String

    为jsonp请求指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。

    自己的简单记录。。。

  • 相关阅读:
    邮件发送
    生成缩略图
    截取字符串,中文安两个字符处理
    获取客户机MAC地址 根据IP地址 获取机器的MAC地址 / 获取真实Ip地址
    文件操作
    MD5加密 和 自定义加密解密
    Html标签替换(过滤掉html特殊符号)
    .net core 自定义中间件
    querySelector和querySelectorAll
    CSS下背景属性background的使用方法
  • 原文地址:https://www.cnblogs.com/u0mo5/p/4772053.html
Copyright © 2011-2022 走看看