技术饭
jsonp请求接口php设置返回头部以及js格式化数字
jsonp请求接口php设置返回头部以及js格式化数字,文章主要整理了jsonp请求的php接口的流程并且给出了一些js函数代码,方便处理数据。
1、jsonp请求接口
$(function(){
//获取参数
var $params = getRequest();
//jsonp请求接口
$.getJSON("http://api.copylian.com/Api/Index/getOperationReport/rt_type/jsonp/date/"+$params['date']+"/my_api_cb/getOperationReport?jsonpCallback=?");
});
其中:rt_type是返回的类型,my_api_cb是返回的回调方法
2、执行接口,在执行接口之前会调用构造函数设置jsonp返回信息
public function getOperationReport(){
//设置请求类型
set_return_type();
//返回数据
ajaxReturn('获取数据成功!', 1, $data);
}
3、配置jsonp请求回调参数
'VAR_JSONP_HANDLER'=>'my_api_cb', //jsonp格式参数名
4、关键函数
/**
* @desc 用户设置返回值类型及JSONP回调函数,用于解决跨域问题
* @'VAR_JSONP_HANDLER'=>'my_api_cb',
*/
function set_return_type() {
$rt_type = I ( "request.rt_type", "", "strip_tags" );
$rt_type = $rt_type == "" ? session ( "rt_type" ) : $rt_type;
$rt_type = check_rt_type ( $rt_type );
C ( 'DEFAULT_AjaxReturn', $rt_type );
if ($rt_type == "JSONP") {
$jsonp_handler = isset ( $_GET [C ( 'VAR_JSONP_HANDLER' )] ) ? $_GET [C ( 'VAR_JSONP_HANDLER' )] : "";
if ($jsonp_handler) {
$jsonp_handler = preg_replace ( "/[^a-zA-Z0-9_]/", "", $jsonp_handler );
$jsonp_handler = preg_replace ( "/[^a-zA-Z_]/", "", $jsonp_handler );
$_GET [C ( 'VAR_JSONP_HANDLER' )] = $jsonp_handler;
}
}
}
/**
* @desc 返回大写的类型
*/
function check_rt_type($str) {
$type = 'JSON';
$str = strtoupper ( $str );
if ($str == 'XML' || $str == 'JSONP') {
$type = $str;
}
return $type;
}
/**
* @desc 返回数据
*/
function ajaxReturn($rt_msg, $rt_no = '', $data = array(), $isLog = 1) {
if (is_array ( $rt_msg )) {
$rts = $rt_msg;
} else {
$rts = array ();
$rts ['rt'] = $rt_no;
$rts ['msg'] = $rt_msg;
$rts ['data'] = $data;
}
$rt_type = C ( 'DEFAULT_AjaxReturn' ); //返回类型
$str = json_encode ( $rts );
if ($rt_type == "JSONP") {
$handler = isset ( $_GET [C ( 'VAR_JSONP_HANDLER' )] ) ? $_GET [C ( 'VAR_JSONP_HANDLER' )] : C ( 'DEFAULT_JSONP_HANDLER' );
$str = $handler . '(' . $str . ');'; //设置jsonp返回
}
// 返回JSON数据格式到客户端 包含状态信息
header ( 'Content-Type:application/json; charset=utf-8' );
exit ( $str );
}
5、JavaScript方法
//获取参数
function getRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substring(1);
var strs = str.split("&");
for(var i = 0; i < strs.length; i ++) {
theRequest[strs[i].split("=")[0]]=(strs[i].split("=")[1]);
}
}
return theRequest;
}
/*
* 参数说明:
* number:要格式化的数字
* decimals:保留几位小数
* dec_point:小数点符号
* thousands_sep:千分位符号
*/
function number_format(number, decimals, dec_point, thousands_sep) {
number = (number + '').replace(/[^0-9+-Ee.]/g, '');
var n = !isFinite(+number) ? 0 : +number,
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
s = '',
toFixedFix = function (n, prec) {
var k = Math.pow(10, prec);
return '' + Math.floor(n * k) / k;
};
s = (prec ? toFixedFix(n, prec) : '' + Math.floor(n)).split('.');
var re = /(-?\d+)(\d{3})/;
while (re.test(s[0])) {
s[0] = s[0].replace(re, "$1" + sep + "$2");
}
if ((s[1] || '').length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1).join('0');
}
return s.join(dec);
}
//number_format(1234567.089, 2, ".", ",");//1,234,567.08
/*
* number:要格式化的数字
*/
function number_format_zh(number){
var number = Math.floor(number);
var number_y = Math.floor(number/100000000);
var number_w = Math.floor(number%100000000/10000);
var number_q = Math.floor(number%100000000%10000);
var number_yuan = Math.floor(number%100000000%10000/1000);
var number_str = '';
if(number_y > 0){
number_str += "<span>"+number_y+"</span>"+'亿';
number_str += "<span>"+number_w+"</span>"+'万';
number_str += "<span>"+number_q+"</span>";
} else if(number_w > 0){
number_str += "<span>"+number_w+"</span>"+'万';
number_str += "<span>"+number_q+"</span>";
} else if(number_q > 0){
number_str += "<span>"+number_q+"</span>";
} else {
number_str += "<span>"+number_yuan+"</span>";
}
return number_str;
}
文明上网理性发言!