跨域访问之JSONP

简介:

跨域

在平常的工作中常常会遇到A站点的需要访问B站点的资源.

这时就产生了跨域访问。

跨域是指从一个域名的网页去请求另一个域名的资源。浏览器遵循同源策略,不允许A站点的Javascript 读取B站点返回的数据。因为A站点的javascript 与B返回的数据不同源的。但是浏览器并不阻止A的Ajax请求访问B,浏览器允许A取回B的数据,但是不允许A中的脚本操作B的数据。如下图所示的③

 

 

 

 

 

同源策略:

数据与操作必须是同源的,否则不能操作。

什么是同源:浏览器认为的同源是什么?

判断是否同源,标准如下

主机名:IP或域名

端口号:

协议:http,https

 

如何解决?

如果操作的脚本与数据同源,那么浏览器不会阻止这样的操作。那么如何做呢?

 

浏览器调用js文件时则不受跨域的影响(不仅如此,我们还发现凡是拥有”src”这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>,如果能把操作与数据放在一起,那么浏览器就会网开一面,对此操作放行。

 

 

 





 

 

 

这时JSONP 应运而生。

 

JSONP:Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

 

实战

l  项目结构

 

 

 

hbb0b0.mvc.website 站点 hbb0b0/index页面获取 站点Hbb0b0.mvc.API 下StudentController/GetStudentList 的数据

 

l  hbb0b0.mvc.website  index页面代码如下:

复制代码

<script type="text/javascript">

        $(function () {

            $.ajax({

                type: "get",

                async: false,

                url: "http://localhost:51250/Student/GetStudentList",

                dataType: "jsonp",

                jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
                jsonpCallback: "getStudentList",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
                success: function (data) {                    //alert(data.name);
                    console.log(data);

                },

                error: function () {

                    alert('fail');

                }

            });

 

        }); 

        function getStudentList(list) {

 

            alert();

            console.debug("getStudentList", list);

            $.each(list, function (index, student) { 

                var html = "<ul>";

                html += "<li> name:" + student.Name + "</li>"

                html += "</ul>";

                $("#divStudentList").append(html);

            });

        }    </script>

复制代码

 

 

l  Hbb0b0.mvc.API StudentController/GetStudentList 代码如下

 

复制代码

public class StudentController : Controller

    {        // GET: Student

        public ActionResult Index()

        {            return View();

        } 

     

        public ContentResult GetStudentList(string callback)

        {            const int MAX = 10;

            List<Student> list = new List<Student>();            for (int i = 0; i < MAX; i++)

            {

                Student st = new Student(i);

                list.Add(st);

            } 

           string data=  new JavaScriptSerializer().Serialize(list);            return  Content(string.Format("{0}({1})", callback,data));

        }

    } 

    public class Student

    {        public Student(int i)

        {            this.ID = string.Format("ID:{0}",i.ToString());            this.Name = string.Format("Hbb0b0{0}", i.ToString());

        } 

        public string ID

        {            get;            set;

        } 

        public string Name

        {            get;            set;

        } 

        public int Age

        {            get;            set;

        }

 

 

}

复制代码

 

 

l  执行结果:

 

 





















本文转自xmgdc51CTO博客,原文链接:http://blog.51cto.com/12953214/1942282 ,如需转载请自行联系原作者





相关文章
|
5天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
389 93
|
6天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
5天前
|
SQL 人工智能 自然语言处理
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
随着生成式AI的普及,Geo优化(Generative Engine Optimization)已成为企业获客的新战场。然而,缺乏标准化流程(Geo优化sop)导致优化效果参差不齐。本文将深入探讨Geo专家于磊老师提出的“人性化Geo”优化体系,并展示Geo优化sop标准化如何帮助企业实现获客效率提升46%的惊人效果,为企业在AI时代构建稳定的流量护城河。
391 156
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
|
5天前
|
数据采集 缓存 数据可视化
Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路
本文深入探讨Android无侵入式埋点技术,通过AOP与字节码插桩(如ASM)实现数据采集自动化,彻底解耦业务代码与埋点逻辑。涵盖页面浏览、点击事件自动追踪及注解驱动的半自动化方案,提升数据质量与研发效率,助力团队迈向高效、稳定的智能化埋点体系。(238字)
272 158
|
13天前
|
机器人 API 调度
基于 DMS Dify+Notebook+Airflow 实现 Agent 的一站式开发
本文提出“DMS Dify + Notebook + Airflow”三位一体架构,解决 Dify 在代码执行与定时调度上的局限。通过 Notebook 扩展 Python 环境,Airflow实现任务调度,构建可扩展、可运维的企业级智能 Agent 系统,提升大模型应用的工程化能力。