[前端]jsonp

jsonp

之前清蒸了几只ajax螃蟹,味道不错,不过呢?螃蟹虽好,肉却太少哦!

ajax出现,解决了页面不刷新的情况下与后台进行通讯与数据交换,但是有一个致命的缺陷,他是不能跨域的。

跨域:  <==慨念问题点左边

总之端口号那个冒号前面的任何一个地方不一样都是跨域请求。

我们知道  img标签的src   script标签的src 是可以进行跨域请求数据的,于是不知是哪位大神,异想天开曲线救国,使用script标签进行后台的数据获取,

当然这个script标签是我们用js脚本动态生成的,举个栗子

首先我准备一个写好的脚本

1.js

funDemo({"result":"远程数据"});

再写一个html文件

1.html

<!DOCTYPE html >
<head>
    <title>1</title>
    <script type="text/javascript">
    var funDemo= function(data){
     alert( data.result);
    };
    </script>
    <script type="text/javascript" src="http://aaa.com/1.js"></script>
</head>
<body>

</body>
</html>

function funDemo(data){alert(data.result);} 函数这么声明也是一样的!!!

其实就是在html文件上声明一个名字叫,funDemo的函数,里面有一个参数

然后,执行了一个远程的(跨域的)js代码,调用了这个函数,远程的js提供数据,作为参数

funDemo({"result":"远程数据"});

那么新问题来了,虽然能这样获取到远程的数据,但是这个函数名必须与后台的函数名保持一致,解决方案是在src的后面提供一个函数名的参数,

后台的程序根据函数名动态的生成这个js文件

1.html 修改

<script type="text/javascript" src="http://aaa.com/1.php?&callback=funDemo"></script>

后台的话可以考虑用字符串拼接的方式来返回这个js

1.php

<?php

header(‘Content-Type:application/x-javascript‘);

$callback=$_REQUEST[‘callback‘];

echo "function $callback(data){alert(data.result);}"
>

我稀烂的PHP也不知道有没有写对=.=

这样就大功告成了。

jQuery里面的jsonp是放在ajax里面的,但是真心半毛钱关系木有呀!!

螃蟹可以吃,虾也可以吃,都是清蒸,一样的做法。但是他们真心不是一种东西!!!!

附赠ajax中使用jsonp

 $.ajax({
            type : "get",
            url : "1.php",
            dataType : "jsonp",
            jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
            jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
           success : function(json){
               //do something
             },
            error:function(){
                //do something
            }
        });
时间: 2024-08-08 05:37:31

[前端]jsonp的相关文章

Django 【第十九篇】JS实现的ajax、同源策略和前端jsonp解决跨域问题

一.回顾jQuery实现的ajax 首先说一下ajax的优缺点 优点: AJAX使用Javascript技术向服务器发送异步请求: AJAX无须刷新整个页面: 因为服务器响应内容不再是整个页面,而是页面中的局部,所以AJAX性能高: jquery 实现的ajax index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <t

前端 - jsonp 跨域ajax

jsonp 跨域ajax原理: 浏览器同源策略限制 如何解决同源策略限制: 方式一: 利用创建script块,在其中执行src属性为 远程url 异域 用函数(返回值) 的形式返回参数 方式二: jquery方式 异域 用函数(返回值) 的形式返回参数 HTML代码 {#html代码开始#} <input type="text" name="k3" value="123"> {#利用script块方式#} <input type

天易38----sturts2+jsonp的使用

一:百度介绍: JSONP(JSON with Padding)是JSON的一种"使用模式",可用于解决主流浏览器的跨域数据访问的问题.由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外.利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP.用 JSO

跨越请求,关于后端session会话丢失的解决办法(转载)

目前使用前后端分离的模式开发,后端提供跨域接口.前端jsonp调用,绑定数据,但是在该站点下有个人中心模块存在的情况下,服务端的session会话会被跨域请求覆盖改掉 大家都知道tomcat使用cookie中jsessionid来区分客户端session会话 跨域请求接口恰恰有时候响应回来回改变该站点下的jsessionid值,导致服务器每次判断都是一个新的会话 以网站个人中心模块来说,每一个跨域jsonp请求,都会Response 一个cookie值,SET-COOKIE:JSESSIONID

跨域请求,关于后端session会话丢失的解决办法

目前使用前后端分离的模式开发,后端提供跨域接口.前端jsonp调用,绑定数据,但是在该站点下有个人中心模块存在的情况下,服务端的session会话会被跨域请求覆盖改掉 大家都知道tomcat使用cookie中jsessionid来区分客户端session会话 跨域请求接口恰恰有时候响应回来回改变该站点下的jsessionid值,导致服务器每次判断都是一个新的会话 以网站个人中心模块来说,每一个跨域jsonp请求,都会Response 一个cookie值,SET-COOKIE:JSESSIONID

微信小程序/网站 上传图片到腾讯云COS

COS简介: 腾讯云提供的一种对象存储服务,供开发者存储海量文件的分布式存储服务.可以将自己开发的应用的存储部分全部接入COS的存储桶中,有效减少应用服务器的带宽,请求等.个人也可以通过腾讯云账号免费使用COS6个月,https://cloud.tencent.com/product/cos 整体流程简介:  1. 前端引入cos的SDK文件 2. 监听上传控件,并在图片加载至网页临时流中发起签名请求 3.后端根据上传的请求方式和路径参数返回签名Authorization和token XCosS

16.vue-cli跨域,swiper,移动端项目

==解决跨域:== 1.后台 cors cnpm i -S cors 2.前端 jsonp 3.代理 webpack: myvue\config\index.js 找 proxyTable proxyTable: { "/anhao": { target: "http://localhost:3000", changeOrigin: true, pathRewrite: { //需要rewrite重写的, 如果在服务器端做了处理则可以不要这段 "^/anh

跨域请求的解决方案

1 本节任务 理解 ajax 的跨域访问 2Ajax 跨域介绍 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器 对 JavaScript 施加的安全限制. 什么是同源策略: 所谓的同源,指的是域名.协议.端口均相等. 不同源的系统使用 ajax 发送求,会存在跨域的问题:例如 http://www.abc.com/ 访问 http://www.xyz.com 域名不一致,存在跨域 http://www.abc.com/ 访问 https://www.abc.co

【前端基础】动态脚本与JSONP

博主入职两个月了,越来越感受到打好基础对于前端工程师的重要性,在向着狂拽酷炫的框架&构建工具狂飚之前,必须有一个坚实的基础打底,才不至于轻易翻车.所以博主最近一直在恶补<JS高级程序设计>,发现了很多第一次读时忽略的.有趣的地方.不愧是经典,常读常新呀! PART 1  最熟悉的陌生人--动态脚本 对于一些刚接触前端不久的同学来说,"动态脚本"可能是一个有些陌生的字眼,我也是偶然看高程,才想起同桌的你--不,才注意到这个技术.但事实上,这是每个前端每天都会用到的技术