• 跨域请求


    1. 先说一说URL,比如script标签里的src、link标签里的href这种他的URL后缀名可以随便写的。比如<script src="js.css"></script> 然后js.css文件里返回js代码,不是css代码,只要他返回的代码能够解析就行,URL无所谓。像src,href主要功能都是向服务器发送一次http请求,来获取相应的资源。
    2. 想要屏蔽一些网站,可以使用本地域名绑定,本地解析给他屏蔽掉。
    3. 当ajax跨域的时候,可以使用<script src=""><script>来引入文件,举个例子:我想要a.com下的ajax请求b.com下的server.php文件资源,那么用原生js代码和jquery的ajax都是不行的,不同源。那么可以使用<script="http://b.com/server.php"><script>来引入资源。这样就可以实现跨域请求。因为script标签本身具有跨域功能。
    4. 当用script引入资源后,如何使用服务端的数据呢?(因为这种请求回来的数据无法直接使用,虽然确实返回数据了,,在响应中看到)

        (1)在服务器端使用   echo ' callback() ' ,然后在客户端定义一个callback函数来处理服务器数据,举个例子:

    $str = json_encode(['name'=>'qaq','age'=>20]);// 这是服务器代码
    echo "callback($str)"; //注意使用双引号
    //echo的callback()会返回给客户端,在客户端就调用了这行代码,就相当于在客户端写了callback()来调用函数一样的效果

         (2)客户端要定义一个和服务器端echo的同名的函数来操作服务器端数据。

    <script>
        function callback(data){  //客户端代码
            //code···
        }
    
    <script>    

       5.  上面的是原生js跨域,接下来是jquery跨域(注意红色部分必须是问号,callback只是随便起的名字)

    $.getJSON('http://b.com/server.php?callback=?',{name:'xxx',age:20},function(data){//code···});//客户端代码

     上面客户端的 callback=?中的问号就是会随机生成一个字符串,这个字符串就是要使用函数的名称。

    $str = json_encode(['name'=>'xxx','age'=>20]);//服务器端数据
    echo $_GET['callback']."($str)"; //$_GET['callback']是一个函数名,只不过这个函数名是一个随机字符串,所以要用$_GET[]来获取函数名,这行代码就和echo "callbakc($str)";一样的效果

       6.在laravel框架中,发送ajax请求后,如果服务器端想要给客户端返回数组,按理说是需要使用json_encode()转换成json格式的字符串,但是laravel底层自动帮我们完成了转换这件事,所以使用laravel框架我们就不需要手动将数组转换成json格式了。

  • 相关阅读:
    Could not update ICEauthority file /var/lib/gdm/.ICEauthority
    反爬虫中技术点的定义
    反爬虫一些问题
    反爬虫准备
    题解「BZOJ4621 Tc605」
    题解「ZJOI2019 语言」
    题解「清华集训2012 序列操作」
    题解「CF1174F Ehab and the Big Finale」
    题解「CF516D Drazil and Morning Exercise」
    题解「HNOI2018 寻宝游戏」
  • 原文地址:https://www.cnblogs.com/bneglect/p/10402977.html
Copyright © 2020-2023  润新知