宝哥软件园

jQuery JSONP跨域请求的简单解决方案

编辑:宝哥软件园 来源:互联网 时间:2021-09-01

JSONP(JSON with Padding)是JSON的一种“使用模式”,可以用来解决主流浏览器的跨域数据访问问题。一般来说,位于server1.example.com的网页由于同源策略无法与server1.example.com以外的服务器进行通信,HTML的脚本元素是个例外。有了脚本元素的这种开放策略,Web页面就可以获得其他来源动态生成的JSON数据,这种使用模式被称为JSONP。JSONP捕获的数据不是JSON,而是任意的JavaScript,由JavaScript文字翻译器执行,而不是JSON解析器。

上面这段话来自百度百科,概念总是那么抽象难懂,看例子是最直观的表达。我看过很多例子,当我理解了那一点,自然会学会抽象描述。这就是为什么常说“学习知识是一个由薄到厚、由厚到薄的过程”。好吧,那太远了。我们直接看一个例子。

问题:有一个demo.html本地页面需要从http://localhost 33603561/user/getallnames获取数据并显示。

答:因为问题中的双方不在同一个服务器上,所以需要使用jsonp进行跨域访问。

客户撰写

客户使用$。jQuery中提供的getJson方法可以跨域访问。GetJson有三个参数:

一、网址:请求地址;

二.数据:发送到服务器的参数;

三.回调:成功时的回调函数。

getJson的用法和普通的$基本一致。get方法,但不同的是getJson需要添加回调=?url后的参数部分。这个固定部分会被jQuery自动替换吗?是执行回调函数的正确函数名。然后在回调函数中操作从国外返回的json对象,回调函数的参数就是json对象。

!DOCTYPE html html xmlns=' http://www . w3 . org/1999/XHTML ' hearteta http-equiv=' Content-Type ' Content=' text/html;charset=utf-8 '/title/title/head body ul id=' NameList '/ul script src=' http :http://cdn . bootcss.com/jquery/1 . 12 . 4/jquery . min . js '/script script type=' text/JavaScript ' $。getJSON(' http://localhost :3561/User/GetAllNames?回调=?函数(JSON){ for(var I=0;i json.lengthi ) { $('#nameList ')。追加(' Li ' JSON[I]'/Li ');} });/script/body/html (2)服务器编写服务器的逻辑主要是将数据序列化为json字符串,然后以‘回调(JSON)’的形式打包,其中回调是jQuery自动生成并传输到服务器的函数的名称。下面是使用C#实现的:

公共类用户控制器:控制器{公共字符串getallnames(字符串回调){ string[]name=new string[]{ '张三丰','张无极','令狐冲','杨过','郭靖' };JAVAScript Serializer jss=new JAVAScript Serializer();字符串json=jss。序列化(名称);返回字符串。格式(' {0}({1})',回调,JSON);}}至此,问题成功解决。

思考:如果服务器已经写了回调(比如:returnstring . format(' mot({ 0 })',JSON);),那么客户应该写什么呢?

参考:

$.Ajax(' http://localhost :3561/User/GetAllNames ',{ jsonpCallback: ' moty ',dataType: 'jsonp ',success:函数(JSON){ for(var I=0;i json.lengthi ) { $('#nameList ')。追加(' Li ' JSON[I]'/Li ');} }});

更多资讯
游戏推荐
更多+