加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

JSONP

发布时间:2020-12-16 19:56:28 所属栏目:百科 来源:网络整理
导读:JSON with Padding 是 JSON 的一种使用方式,可以跨域对数据进行访问。 由于同源策略,不同域中的网页不能互相进行访问,但是script src=”http://...” 是个例外,它可以访问任何域中的脚本,比如: script type ="text/javascript" src ="http://www.google

JSON with Padding 是 JSON 的一种使用方式,可以跨域对数据进行访问。

由于同源策略,不同域中的网页不能互相进行访问,但是<script src=”http://...” >是个例外,它可以访问任何域中的脚本,比如:

<script  type ="text/javascript"  src ="http://www.google.com/jsapi" ></ script >

正是由于script这个标签,我们可以从其他域来动态产生JSON数据,而使用这种模式就是所谓的JSONP。用JSONP抓取的资料并不是JSON,而是任意的JavaScript。

若是普通的请求返回的数据为

context.Response.Write( " {"Id":"1","Name": "Bery"} " );

若是JSONP的请求返回的是:

string callbackFunName = context.Request[ " jsonpcallback " ];

context.Response.Write(callbackFunName + " ({"Id":"1","Name": "Bery"}) " );

这时我们会发现,第二种代码也就是把用户想要请求的数据用一个方法名包装起来。

使用jQuery访问的代码如下:

   
$.ajax({ type: ' GET ' ,url: ' http://bery:8010/Z_Demo/Handler.ashx ' ,contentType: ' application/json ' ,dataType: " jsonp " ,jsonp: ' jsonpcallback ' ,success: function (data) { alert(eval(data).Name); },error: function (er) { alert( ' error ' ); } });

若是在WCF中支持跨域访问,需要在system.serviceModdel节点中添加如下节点配置:

 
  
    
    
  
   
< standardEndpoints > < webHttpEndpoint > <!-- 跨域访问 --> < standardEndpoint crossDomainScriptAccessEnabled ="true" /> </ webHttpEndpoint > </ standardEndpoints > < bindings > < webHttpBinding > <!-- 跨域访问 --> < binding crossDomainScriptAccessEnabled ="true" /> </ webHttpBinding > </ bindings >

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读