jsonp返回的数据是啥格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsonp返回的数据是啥格式相关的知识,希望对你有一定的参考价值。

jsonp主要是为了解决跨域访问问题而产生的,其返回的数据格式一般就是一个js脚本,这个脚本有以下特点:

    返回的js脚本通常是服务端动态生成的。

    整个脚本通常有且仅有一条语句,且是一个函数调用。

    脚本中调用到的函数,是页面上存在的一个函数,其函数名通过get参数传递给服务端,服务端再将其回写到js脚本中。

    函数的参数,是服务端处理后的结果数据,以json格式直接写在脚本中。这也是jsonp得名的由来。

因为,ajax是不允许跨域访问的,所以要从其他站点获取数据时,就需要经过一些特殊的手段才行,jsonp就是一种成本比较低的手段(此外还有服务端代理等方式)。jsonp主要是利用了<script><img><iframe>标签可以跨域访问的特点。具体的步骤如下:

    首先,在本地页面上事先准备好一个用于接受返回数据的函数,比如:function showList(listdata)...;

    其次,在需要的时点静态或动态地创建一个标签,比如:<script type="text/javascript" src="http://another.website/jsonp_call?arg1=xx&arg2=xx&callback=showList" ></script>,其中:

      another.website:是另外一个站点的域名或ip地址。

      jsonp_call:是该站点提供的一个动态内容访问的服务,可用php、java等任何技术实现。

      arg1、arg2:是该服务所需要的参数

      callback:是用于返回结果的回调函数名。

    然后,another.website站点接收到这个jsonp_call的请求后,进行相应的处理,并将放回的结果封装为一个js脚本,其内容类似这样的形式:showList([id:1,name:'a', id:2,name:'b', ..., id:n,name:'NNN']);

    最后,结果返回到客户端后,就会自动解析并执行这个showList函数。

这样就完成了从“向其他站点发起请求”到“接收其他站点的应答数据”的整个过程,并且突破了ajax跨域访问的限制。

参考技术A jsonp不是什么格式,应该是非正式的传输协议,保证json数据的安全用的,个人理解;http://kb.cnblogs.com/page/139725/ 看看这篇文章 参考技术B JSON格式。 参考技术C jsonp返回的数据什么格式都有啊,看你后台怎么处理的

接口测试返回数据为JSONP格式时如何处理

#需要被处理的jsonp数据
JSONP = "jsonpreturn({‘c‘: 1, ‘d‘: 2});"
#处理方法
def jsonp_to_json(JSONP):
    JSONP = JSONP.strip(;)
    #函数名称和要处理的jsonp数据前面部分一致
    def jsonpreturn(lists):
        return lists
    e = eval(JSONP)
    return e
#调用方法,得到处理后的结果
ret = jsonp_to_json(JSONP)
print ret,type(ret)

ps: eval()内置函数是将字符串str当成有效的表达式来求值并返回计算结果

处理这种数据还挺方便,但是如果是用来开发要慎用~也是有风险

 





以上是关于jsonp返回的数据是啥格式的主要内容,如果未能解决你的问题,请参考以下文章

php返回json,xml,JSONP等格式的数据

在vue中使用axios实现跨域请求并且设置返回的数据的格式是json格式,不是jsonp格式

php文件jsonp返回字符串格式

WCF 返回 JSONP 或自定义结果格式

jsonP格式接口实现

json和jsonp