1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
/**
 * @author zzclslove
 * @abstract php实现jsonp接口
 * @description 在控制器层直接使用 ControllerTool::json_report($data, 'GBK', $jsonp);
 * 即可向前台js返回数据
*/
class ControllerTool
    /**
    * @abstract 将数据转换为json字符串
    * @param array $data 需要输出的数据
    * @param string $in_charset 输入数据的字符集,默认为GBK
    * @param string $var 以jsonp格式赋值变量为$var
    */
    public static function json($data$in_charset 'GBK'$var = null)
    {
        if(!self::belongToUTF8($in_charset))
        {
            $data_utf8 = self::iconv_object($in_charset'UTF-8'$data);
        }
        if (!empty($var))
        {
            echo "var ".$var"=";
        }
        return json_encode($data_utf8);
    }
    /**
     * @abstract 将数据以json格式输出
     * @param array $data 需要输出的数据
     * @param string $in_charset 输入数据的字符集,默认为GBK
     * @param string $var 以jsonp格式赋值变量为$var输出
    */
    public static function echo_json($data$in_charset 'GBK'$var = null)
    {
        echo self::json($data$in_charset$var);
    }
                     
    public static function echo_parent_callback_json($data$in_charset 'GBK'$parent_callback = null)
    {
        echo '<script>try{document.domain="webdev.com";}catch(e){}'
                .'parent.'.$parent_callback.'('.self::json($data$in_charset).')'
                .'</script>';
    }
    /**
     * @abstract json格式报告结果
     * @param array $data 数据正文
     * @param string 数据正文的字符集
     * @param string $var 以jsonp格式赋值变量为$var输出
    */
    public static function json_report($data array(), $in_charset 'GBK'$var = null, $parent_callback = null)
    {
        $json_data array();
        $json_data['data'] = $data;
        if(!empty($parent_callback))
        {
            self::echo_parent_callback_json($json_data$in_charset$parent_callback);
        }
        else
        {
            self::echo_json($json_data$in_charset$var);
        }
    }
     
    private static function belongToUTF8($charset)
    {
          $utf8 array('utf8''UTF-8');
          return in_array($charset$utf8);
    }
    
/**
     * 对象字符集转换
     * @param string $in_charset 输入字符集
     * @param string $out_charset 输出字符集
     * @param mixed $in_obj 输入对象
     */
    public static function iconv_object($in_charset$out_charset$in_obj)
   {
        $out_obj array();
        self::do_iconv_object($in_charset$out_charset, &$in_obj, &$out_obj);
        return $out_obj;
   }
}

php 实现 jsonp 数据接口的更多相关文章

  1. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  2. 使用Asp.net WebAPI 快速构建后台数据接口

    现在的互联网应用,无论是web应用,还是移动APP,基本都需要实现非常多的数据访问接口.其实对一些轻应用来说Asp.net WebAPI是一个很快捷简单并且易于维护的后台数据接口框架.下面我们来快速构 ...

  3. 腾迅股票数据接口 http/javascript

    腾迅股票数据接口 http/javascript 分类: Finance Perl2012-12-21 23:48 31132人阅读 评论(3) 收藏 举报 之前使用了新浪的股票数据,由于新浪http ...

  4. Mock模拟后台数据接口--再也不用等后端的API啦

    ok,在开发中经常需要从后台获取数据,那么有时候后台的数据接口并没有写好,所以这时候,就需要自己模拟数据接口,来实现前端逻辑, 今天数的就是阿里巴巴的一款mock产品,很好用的哦!!!! ok!这是我 ...

  5. Winform项目调用asp.net数据接口

    最近一个WPF项目需要改写成android项目,思路是在asp.net项目中编写一个通用接口,便于其它平台下调用数据.刚接触到这些东西的时候完全是一头雾水,最根本的原因是不明白网站中的一个网页,为什么 ...

  6. C++ Redis mset 二进制数据接口封装方案

    C++ Redis mset 二进制数据接口封装方案 需求 C++中使用hiredis客户端接口访问redis: 需要使用mset一次设置多个二进制数据 以下给出三种封装实现方案: 简单拼接方案 在r ...

  7. 数据接口管理工具 thx RAP

    RAP是数据接口管理工具.在开发时前端将请求转至RAP,由RAP提供模拟数据:而后端使用RAP测试接口的正确性.这样RAP就成为了开发过程中的强 依赖,进而确保接口文档的实时正确性.RAP采用JSON ...

  8. 服务端提供的JSON数据接口与用户端接收解析JSON数据

    JSON格式的服务接口:http://www.cnblogs.com/visec479/articles/4118338.html 首先来了解下JSON格式解析 json结构的格式就是若干个 键/值( ...

  9. 使用jQuery-AJAX–读取获得跨域JSONP数据的示例

    在项目开发中,如果在同一个域名下就不存在跨域情况,使用$.getJSON()即可实现.但是需要跨域请求其他域名下面的Json数据就需要JSONP的方式去请求,跨域写法和getJSON有差异.如下:   ...

随机推荐

  1. 华为上机:IP地址转换

    IP地址转换 描述: IP地址的长度为32,即有2^32-1个地址.IP地址一般采用点分十进制表示法,例如"192.168.1.1".IP地址也可以直接用一个32位的整数进行表示. ...

  2. lintcode:线段树的查询

    线段树的查询 对于一个有n个数的整数数组,在对应的线段树中, 根节点所代表的区间为0-n-1, 每个节点有一个额外的属性max,值为该节点所代表的数组区间start到end内的最大值. 为Segmen ...

  3. 近期学习js总结

    都是一个细节问题老是犯错,还有就是之前的知识点没有去复习,老是犯错误.总结一下避免以后又犯错. 1.没有去检查对象是否存在 写完js就是忘记去检查是否存在,等到用到项目中才发现,代码如下:if(!ob ...

  4. JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-002Table per concrete class with implicit polymorphism(@MappedSuperclass、@AttributeOverride)

    一.结构 二.代码 1. package org.jpwh.model.inheritance.mappedsuperclass; import javax.persistence.MappedSup ...

  5. Hibernate笔记——第一个简单实例

     1. 首先进行框架配置 导包 hibernate配置xml文件 ======================= 2. 创建并配置POJO类 Hibernate是操作持久化层的框架,和数据库打交道,其 ...

  6. linux 操作系统下c语言编程入门

    2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理  ...

  7. [iOS]ios archives 出现的是other items而不是iOS Apps的解决方案

    百度了一上午, 总是这样子. (利用cocoapods上传项目的时候, 总是这样无法点击UpLoad to App Store) 然后. 这样做. 就可以了!

  8. Linux平台Cpu使用率的计算

    proc文件系统 /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的 ...

  9. 求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)和不用循环/goto/递归输出1~100的10种写法

    来源:据说是某一年某个公司的面试题 题目:求1+2+…+n, 要求不能使用乘除法.for.while.if.else.s witch.case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很 ...

  10. python csv tsv处理

    空行: http://www.crifan.com/python_csv_writer_writerow_redundant_new_line/