返回jsondata为空空窗期是什么意思思

应用程序接口(API:application programming interface)是一组定义、程序及协议的集合,通过 API 接口实现网络多节点间的相互通信.
本API文档对两种机制做描述:
Ecstore对外提供的资源API接口(以下简称API)
Ecstore资源变更时主动发起的请求(以下简称主动发起)
Matrix对接API(api)
系统自带的标准API, 是和 进行互联互通的专用API. 
不通过matrix直接联通的API机制,包括校验机制,调用方需要预先获取token
开放API(open api)
提供给与外系统直接进行互联的途径,没有校验机制,需自己添加
主动发起:
支付单变更
Ecstore资源提供方,提供接口供接入方调用资源
ShopEx开放平台ShopEx开放平台(ShopEx Open Platform,简称SOP)ShopEx服务的开放平台,基于基础服务、数据和流程。提供互连互通服务。通过平台,连接一切。
ShopEx是面向电子商务企业的数据和服务的综合性平台,为互联网电子商务企业应用提供应用接入、应用分销、整合方案、服务接入等一整套服务的开放性平台,通过接入ShopEx开放平台,电子商务企业可轻松与第三方开放应用数据整合、成本控制、资源共享等完整的解决方案。
其主要内容包括:以OpenAPI形式开放的ShopEx电子商务基础服务、ShopEx自有的开放式应用平台、对第三方应用平台的开放式基础支持。
接入方接入方为资源使用方
接入方发起(以下三种联通方式):
联通ShopEx开放平台,通过ShopEx开放平台联通Ecstore
通过Ecstore提供的直联API,直接调用(需要获取token,使用固定传输规则)
通过Ecstore提供的开放API,直接调用
Ecstore发起:
接入方接入ShopEx开放平台,Ecstore资源发生变更时主动发起请求通过ShopEx开放平台通知调用方
Ecstore资源发生变更时直接发送请求通知调用方
前提:需要在ecstore后台绑定接入方,同时要再 app/${app_id}(默认b2c)/apiv_mapper.xml中绑定双方API版本映射关系
在Ecstore2.0中针对API设计了版本机制。目前最新的API版本是2.0,之前的API版本设为1.0。接入方接入Ecstore时需要指定API版本号,若不指定,默认使用最新版本。
新增api.xmlapp/{app_id}/api.xml
所有ECSTORE系统提供的API都需要在api.xml中进行注册,才可以被外部系统调用
api.xml中只进行API接口注册,不提供openapi接口注册,openapi还是和旧版本一样在services.xml中进行注册
修改api.xml后 cmd update 更新api.xml中注册的API接口
新增apiv_mapper.xml
app/${app_id}/apiv_mapper.xml 版本关系映射表(接入方的API版本和Ecstore API版本关系对应表)
新版API目录
留下旧API版本的回调地址和系统基本请求外部API
API机制主目录
新增API实现目录
? request/
ECStore调用请求外部系统API
? response/
ECStore提供API实现类
? exchanges/
路由器目录
? extends/
? interface/
类接口目录
查看ECStore提供的API列表1、查看API列表
base git:(hotfix) ./cmd base:api list
提供API的APP:b2c
API:b2c.coupon.get_coupon_list
获取优惠劵列表
API:b2c.coupon.get_coupon_number
获取优惠券,只有B类优惠券需要调用
API:b2c.coupon.get_coupon_use_log
获取优惠券使用记录
API:b2c.coupon.create_coupon_to_member
对指定会员发放指定的B类优惠券
API:b2c.order.basic.create
添加单笔交易
API:b2c.order.leave_message
添加订单留言
API:b2c.order.detail
获取单笔交易的详细信息
API:b2c.order.remark
修改一笔交易备注
API:b2c.order.status_update
订单状态更新
2、调试API
- 在app/b2c/testcase/api/basic.php中 $api_params定义需要测试API的应用级参数
base git:(hotfix) ./cmd dev:test do b2c api.php b2c.coupon.get_coupon_list
来源请求中包含 from_node_id(调用方编号) 和 from_api_v(调用方API版本号)
判断是否绑定
查看版本映射表中是否有调用方API版本(apiv_mapper.xml),计算对应的本地版本号
来源请求中不包含上列字段
设定默认请求本地最高版本API(目前是2.0)
从得到的本地版本开始查找,如果没有对应的接口,则向下递减(例如1.0)
matrix对接API需要接入方通过ShopEx开放平台联通
数据格式 utf-8
HTTP请求content-type:application/x-www-form-urlencoded
数据格式为datetime(如:)
数据返回格式(json)
API接口名称
矩阵API协议版本,可选值:1.0
时间戳,格式为yyyy-MM-dd hh:mm:ss,例如: 20:23:30。ShopEx API服务端允许客户端请求时间误差为10分钟
可选,指定响应格式。默认JSON ,目前支持格式为JSON
对调用API时所有输入参数(包括应用级参数)进行签名结果
分配给应用的证书ID
from_node_id
API调用的来源节点ID,对于第三方开发者来说,此id即为申请应用颁发的APP KEY
from_api_v
请求方版本号
to_node_id
API调用的目的节点ID(除了基础服务类api,其他接口必传此参数)
接收方版本号
callback_url
响应回调地址,带http路径的标准URL。(调用异步接口此参数必填)
&rsp&:&succ&,
&tid&:&000001&
请求是否正确 , succ 为成功 , fail 为失败
返回的消息字符串.请求正确时为空,失败时为错误消息
返回请求的数据结果集
&?php
function&get_sign($params,$token){
&&&&return&strtoupper(md5(strtoupper(md5(assemble($params))).$token));
}
function&assemble($params)
{
&&&&if(!is_array($params))&&return&null;
&&&&ksort($params,SORT_STRING);
&&&&$sign&=&'';
&&&&foreach($params&AS&$key=&$val){
&&&&&&&&$sign&.=&$key&.&(is_array($val)&?&assemble($val)&:&$val);
&&&&}
&&&&return&$sign;
}
?&
token的来源:
token是在域名绑定shopex_id时由商派中心生成的一串验签码,此验签码存放在config/certi.php文件中,和证书一起。
调用方式:&
base_certificate::token();
注册对应的API service(规则:api-response_版本号_接口名称),例如:
&service id=&api-response_1.0_b2c.order&&
&class&b2c_api_ocs_1_0_order&/class&
&/service&
&service id=&api-response_2.0_b2c.order&&
&class&b2c_apiv_apis_20_order&/class&
&/service&
实现对应的接口方法
注册订单模块API2.0接口:
&service id=&api-response_2.0_b2c.order&&
&class&b2c_apiv_apis_response20_order&/class&
&/service&
创建 app/b2c/lib/apiv/apis/response20/order.php
第一个参数为接入方请求的用户级参数,第二个参数是API控制对象
&?php
&&&&public&function&search(&$params,&&$service&)
&&&&{
&&&&&&&&//校验参数
&&&&&&&&if(&!(&$start_time&=&$params['start_time']&)&)
&&&&&&&&&&&&$service-&send_user_error('7001',&'开始时间不能为空!');
&&&&&&&&if(&($start_time&=&strtotime(trim($start_time)))&===&false&||&$start_time&==&-1&)
&&&&&&&&&&&&$service-&send_user_error('7002',&'开始时间不合法!');
&&&&&&&&if(&!(&$end_time&=&$params['end_time']&)&)
&&&&&&&&&&&&$service-&send_user_error('7003',&'结束时间不能为空!');
&&&&&&&&if(&($end_time&=&strtotime(trim($end_time)))&===&false&||&$end_time&==&-1&)
&&&&&&&&&&&&$service-&send_user_error('7004',&'结束时间不合法!');
&&&&&&&&$obj_orders&=&&app::get('b2c')-&model('orders');
&&&&&&&&……
&&&&}
直联API同Matrix机制相同,唯一不同在于跳过了ShopEx开放平台。接入方直接发送请求到Ecstore。
接入地址:
数据格式:utf-8
HTTP请求:支持GET、POST方式,支持GZIP压缩
数据格式,例:direct=true&method=b2c.payment.create&sign=6F30EF7D2005A3DAF6D14DBEFEB59A7A
数据返回格式(json)
设置为true
指定调用api的service和mehtod. 例如:method设为b2c.payment.create 那么service:api.b2c.payment, method:create
签名,参看签名算法
时间戳,格式为yyyy-MM-dd hh:mm:ss,例如: 20:23:30
可选,指定响应格式。默认json
&rsp&:&succ&,
&tid&:&000001&
请求是否正确 , succ 为成功 , fail 为失败
返回的消息字符串.请求正确时为空,失败时为错误消息
返回请求的数据结果集
Ecstore资源发生变更时会对外主动发起请求。当前已有的发起点包括:
前提:需要在ecstore后台绑定接入方,同时要再 app/${app_id}(默认b2c)/apiv_mapper.xml中绑定双方API版本映射关系
注册对应service,规则是 api-request_本地api版本号_目标平台_动作,例如(订单新增):
&service id=&api-request_2.0_ecos.ome_ordercreate&&
&class&b2c_apiv_apis_request20_ome_order&/class&
&/service&
实现对应方法,需要 extends b2c_apiv_extends_request,重载对应方法和变量。
注册Service
&service id=&api-request_2.0_ecos.ome_ordercreate&&
&class&b2c_apiv_apis_request20_ome_order&/class&
&/service&
&?php
class&b2c_apiv_apis_20_ome_order&extends&b2c_apiv_extends_request
{
&&var&$method&=&'store.trade.add';
&&var&$callback&=&array();
&&var&$title&=&'订单新增';
&&var&$timeout&=&1;
&&var&$async&=&true;
&&public&function&get_params($sdf)
&&{
&&&&$order_id&=&$sdf['order_id'];
&&&&$order_detail&=&kernel::single('b2c_order_full')-&get($order_id);
&&&&return&$order_detail;
&&}
}
注册对应service(单个触发点可多次注册),规则是 api-request_out_动作,例如(订单新增):
&service id=&api-request_out_ordercreate&&
&class&b2c_apiv_apis_out_order&/class&
&/service&
实现对应方法,需要 implements b2c_apiv_interface_requestout,在方法内发起请求到对应接入方API接口。
注册Service
&service id=&api-request_out_ordercreate&&
&class&b2c_apiv_apis_out_order&/class&
&/service&
&?php
class&b2c_apiv_apis_out_order&implements&b2c_apiv_interface_requestout
{
&&public&function&init($sdf)
&&{
&&&&&&$url&=&'';
&&&&&&$core_http&=&kernel::single('base_httpclient');
&&&&&&$response&=&$core_http-&set_timeout(10)-&post($url,$sdf,array(
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'Content-Encoding'&=&&'gzip',
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&));
&&&&&&if($response===HTTP_TIME_OUT){
&&&&&&&&&&$headers&=&$core_http-&responseHeader;
&&&&&&&&&&kernel::log('Request&timeout,&process-id&is&'.$headers['process-id']);
&&&&&&&&&&return&false;
&&&&&&}else{
&&&&&&&&&&
&&&&&&}
&&}
}
开放API, 是很轻量级的API. 系统不支持签名验证, 也没有做异常处理. 因此可以按照实际业务需要定制开发签名验证和异常处理.
http://{$mydomain}/index.php/openapi/{$openapi_key}/{$openapi_method}/{$key_1}/{$value_1}/{$key_2}/{$value_2}
如果服务器设置过rewritehttp://{$mydomain}/openapi/{$openapi_key}/{$openapi_method}/{$key_1}/{$value_1}/{$key_2}/{$value_2}
$myadmin: 域名
$openapi_key:
open api的唯一标识
$openapi_method:
$value_1: 参数1的值
$value_2: 参数2的值
通过POST/GET进行请求小技巧:
1. 在系统中可以直接用工具类base_httpclient 来实现.
2. openapi的调用api可以用kernel::openapi_url()生成.
$http = new base_
kernel::openapi_url('openapi.queue','worker',array('task_id'=&$task_id));
$http-&post($url,$_POST);
用户传参主要有以下两种方式
url传参(参见上文)
$_POST传参
系统内置回调api, 例如:队列, pam登陆
多系统联通, 例如:Ecstore和erp进行联通. 但需要自定义传输格式(json/xml/serilize/..), 错误处理及签名认证.
openapi是通过进行注册的, 默认的service box以&openapi.&作为前缀, 来看一下我们系统目前所提供的所有openapi.
bryant@forsky %& ./cmd dev:show services | grep -i &^openapi&
openapi.rpc_callback
base_rpc_service
openapi.check
base_rpc_check
openapi.queue
base_service_queue
openapi.pam_callback
pam_callback
openapi.ectools_payment
ectools_payment_api
openapi.b2c.callback.shoprelation
b2c_api_callback_shoprelation
左侧: $openapi_key
open api的唯一标识
$openapi_class_name
注册在$openapi_key上的相应openapi处理类
如果需要使用 ./cmd dev:show services, 需要预装dev app
api类的存放位置: app/{$app_id}/lib/openapi/{$openapi_class_name}.php
系统实例化api类的时候会将对应的app对象({$app_id})作为参数传进来, 也可以通过调用app:get($app_id)来获取需要的app对象:
class&{$openapi_class_name}
{
&&&&/**
&&&&&*&app&object
&&&&&*/
&&&&public&$app;
&&&&/**
&&&&&*&构造方法
&&&&&*&@param&object&app
&&&&&*/
&&&&public&function&__construct($app)
&&&&{
&&&&&&&&$this-&app&=&app::get('ectools');
&&&&&&&&$this-&app_b2c&=&$app;
&&&&}
api类方法的写法:
第一个参数:
将url传过来的参数转化成数组.array({$key1} =& {$value1},{$key2} =& {$vaule2),...)
返回值: 可通过echo/print_r等直接输出. 也可以和通信方约定传输格式及错误处理
&?php
class&{$openapi_class_name}
{
&&&&/**
&&&&&*&app&object
&&&&&*/
&&&&public&$app;
&&&&/**
&&&&&*&构造方法
&&&&&*&@param&object&app
&&&&&*/
&&&&public&function&__construct($app)
&&&&{
&&&&&&&&$this-&app&=&app::get('ectools');
&&&&&&&&$this-&app_b2c&=&$app;
&&&&}
&&&&public&function&create($params)
&&&&{
&&&&...
&&&&echo&'succ';
&&&&}
}
签名验证主要目的是为了保证多节点通信的多方之间的信任关系
唯一标识验证
联通两端分别存放统一的token(一段字符串)
在调用端将token作为调用参数. 
在被调用端, 验证传输过来的token是否与本地存放token一致.
联通两端分别存放一致的token
调用端用token对传输的所有参数(params)通过AC算法生成签名(sign), 然后将sign作为调用参数
在被调用端, 取出sign参数, 然后用本地token对所有参数(除了sign参数)通过AC算法生成本地的sign, 然后跟远端传过来的sign进行比对看是否一致
AC算法:&?php
function get_sign($params,$token){
return strtoupper(md5(strtoupper(md5(assemble($params))).$token));
function assemble($params)
if(!is_array($params))
ksort($params,SORT_STRING);
$sign = '';
foreach($params AS $key=&$val){
$sign .= $key . (is_array($val) ? assemble($val) : $val);
通过set_error_handler函数定义错误处理函数(php4)或通过try catch进行捕获错误
对返回值进行包装. 加入错误处理, 及处理相应错误的错误ID号
失败:{&rsp&:&fail&,&res&:&4003&,&data&:&sign error&}
成功:{&rsp&:&succ&,&res&:&&,&data&:&.....&}
请求失败的时候 res 会返回相关错误信息
请求成功的时候 res 一般为空 data项返回相关数据信息(详情要看相关api接口文档)
场景: 开发一个订单汇总系统, 需要各个销售前端主动将数据推送过来, 设计符合实际业务的api
安全性, 出于数据私密性的考虑, 对安全性有要求, 不希望接口被随意访问
可靠性, 希望不丢单
可维护性,当数据出了问题时, 能快速定位并解决
安全性: 增加签名验证, 已保证接口被可信任的系统访问
可靠性: 当接口发生错误时, 系统可以捕获错误. 并通知订单推送端数据重打, 当重试次数大于3次时记错误日志, 并发邮件给管理员
可维护性: 记录每一个打过来的业务api
安全性, 可靠性和可维护性都是公有化需求, 开发一个 myapp_openapi基类. 所有业务的api继承之, 下边给一个不算完整的例子以作参考
openapi基类: myapp_openapi
class myapp_openapi {
public function __construct() {
set_error_handler(array('myapp_openapi', 'error_handler'));
static function error_handler($errno, $errstr, $errfile, $errline ){
switch ($errno) {
case E_ERROR:
case E_USER_ERROR:
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
case E_STRICT:
case E_USER_WARNING:
case E_USER_NOTICE:
//do nothing
function log($message) {
error_log($message, 0);
function verify($params) {
//验证是否合法
//返回成功
function send_user_succ($result){
$result_json = array(
'rsp'=&'succ',
'data'=&$result,
echo json_encode($result_json);
//返回失败
function send_user_error($code, $data){
$res = array(
echo json_encode($res);
业务api: myapp_openapi_login
class myapp_openapi_login extends myapp_openapi {
public function __construct($app){
$this-&app = $
parent::__construct();
function login($params) {
if (parent::verify($parames)) {
//如果成功则记录日志
$this-&log(&join user&);
//如果失败则返回错误信息
$this-&send_user_error('4003', 'user login fail');我在action里面打印了一下数据,都是正确的。
这是我的action
import java.util.ArrayL
import java.util.HashS
import java.util.L
import java.util.S
import pojo.D
import pojo.U
import com.opensymphony.xwork2.ActionS
import dao.D
public class JasonAction extends ActionSupport{
private static final long serialVersionUID = -7442118L;
private List&Dept& list = new ArrayList&Dept&();
private Set&User& users = new HashSet&User&();
private Dao dao& = new Dao();
public String getUserByDept(){
users = dao.getUserByDept();
return SUCCESS;
public String getDept(){
list = dao.getAllDept();
Dept dept = list.get(0);
System.out.println(dept.getDname());
users = dept.getUsers();
System.out.println(users.size());
return "list";
public List&Dept& getList() {
public void setList(List&Dept& list) {
this.list =
public Set&User& getUsers() {
public void setUsers(Set&User& users) {
this.users =
}
这是struts.xml文件
&?xml version="1.0" encoding="UTF-8" ?&
&!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"&
&struts&
&package name="jason" extends="json-default" &
&action name="json_*" class="action.JasonAction" method="{1}"&
&result name="list" type="json"&
&&&&&&&&&&
&param name="root"&results&/param&&
&/package&
&/struts&&&&
这是jsp页面
&%@ page language="java" import="java.util.*" pageEncoding="utf-8"%&
&%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%&
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&
&html&
& &head&
&&& &base href="&%=basePath%&"&
&&&
&&& &title&My JSP 'list.jsp' starting page&/title&
&&&
&meta http-equiv="pragma" content="no-cache"&
&meta http-equiv="cache-control" content="no-cache"&
&meta http-equiv="expires" content="0"&&&&
&meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&
&meta http-equiv="description" content="This is my page"&
&link rel="stylesheet" type="text/css" href="styles.css"&
&script type="text/javascript" src="js/jquery-1.4.3.js"&&/script&
&script type="text/javascript"&
$(document).ready(function(){
$("#did").change(function(){&&
& $.getJSON("json_getDept.action",function(data){&&
&& //使用jQuery中的each(data,function(){});函数&&
&& //从data.users获取User对象放入value之中&&
&& $.each(data.users,function(i,value){&
alert(value.username);
$("#username").html("&option value="+value.uid+"&"+value.username+"&/option&")&&
&/script&
& &/head&
&
& &body&
&&& department:&select id="did"&
&&&
&option value="1"&software&/option&
&&&
&option value="2"&hardware&/option&
&&& &/select&&br&
&& username:
&& &select id="username"&
&&&
&&& &/select&
& &/body&
&/html&
采纳的答案
应该这样写吧&result name="list" type="json"&
&&&&&&&&&& &param name="root"&users &/param&&
前台拿到数据遍历$.each(data,function(i,value){&
&& alert(value.username);
&&& $("#username").html("&option value="+value.uid+"&"+value.username+"&/option&")&&
action里没有results属性的getter/setter方法
&param name="root"&results&/param&& results应该是你要返回给前台的数据吧,可视后台并没有results应该是users吧
已解决问题
未解决问题页面导航:
→ 正文内容 JQuery处理json
JQuery处理json与ajax返回JSON实例代码
json数据是一种经型的实时数据交互的数据存储方法,使用到最多的应该是ajax与json配合使用了,下面我来给大家介绍jquery处理json数据方法
一、JSON的一些基础知识。
JSON中对象通过"{}"来标识,一个"{}"代表一个对象,如{"AreaId":"123"},对象的值是键值对的形式(key:value)。
&"[]",标识数组,数组内部各个数据之间通过","分割,如["AreaId":"123","AreaId":"345"]。
很多情况下是对象数组,那就是这样:
代码如下:[{"AreaId":"123"},{"AreaId":"345"}]
&其实数组也是一个对象,上面的格式也可以写成这样:
代码如下:{"Area":[{"AreaId":"123"},{"AreaId":"345"}]}
这表示一个Area对象,他有两个子数据,每个子数据也是一个对象,每个子对象都是AreaId。
&JSON中字符串和字符的定义格式和一般的类C语言定义是类似的,双引号定义字符串,单引号定义字符。
JSON的键(Key)用双引号括起来,比如上面的"Area"和"AreaId",都是用双引号括起来的,在一些语言中构造JSON字符串的时候,可以使用转义字符转义双引号。
&二、javascript操作JSON字符
1、先要区分JSON字符串和JSON对象
JSON字符串:
代码如下:Var strJSON = "{"Area":[{"AreaId":"123"},{"AreaId":"345"}]}",
其实也可以写成这样:
代码如下:Var strJSON = ‘{"Area":[{"AreaId":"123"},{"AreaId":"345"}]}',
这表示一个JSON字符串,由于在Js中单引号和双引号都可以表示一个字符串,所以上面第一个使用双引号和第二个使用单引号的都表示一个JSON字符串。
下面看看JSON对象
代码如下:Var JSON = {"Area":[{"AreaId":"123"},{"AreaId":"345"}]},
看到了吧,JSON对象最外面是没有单引号或者双引号的,这就表示一个JSON对象。
在服务器断的脚本:
代码如下:&?php$data['id'] = 1;$dat['name'] = "mary";$da['red']= array_merge($data,$dat);$data1['id'] = 2;$dat1['name'] = "燕子";$da['blue']= array_merge($data1,$dat1);print_r($da);///打印出来是一个二维数组(如下)
/*Array(&&& [red] =& Array&&&&&&& (&&&&&&&&&&& [id] =& 1&&&&&&&&&&& [name] =& mary&&&&&&& )&&& [blue] =& Array&&&&&&& (&&&&&&&&&&& [id] =& 2&&&&&&&&&&& [name] =& 燕子&&&&&&& ))*/
echo json_encode($da);//输出的是一个转化成json格式的字符串,可以直接在js中用(如下)/*{"red":{"id":1,"name":"mary"},"blue":{"id":2,"name":"u71d5u5b50"}}*/?&
jquery脚本:
返回到js后的处理:第一种要用到varl转化的:是字符串的时候就要用eval转化成jquery对象(如下)
代码如下: var arr = '{"red":{"id":1,"name":"mary"},"blue":{"id":2,"name":"u71d5u5b50"}}';//u71d5u5b50这个是php中自动转换的var dataObj = eval("("+arr+")");//这里要加上加好括号和双引号的原因我也不知道,就当是json语法,只能死记硬背了& $.each(dataObj,function(idx,item){&& && //输出& && alert(item.id+"哈哈"+item.name);&& })
第二种:不需要转化的:
代码如下: var arr = {"red":{"id":1,"name":"mary"},"blue":{"id":2,"name":"u71d5u5b50"}};& $.each(arr,function(idx,item){&&&& && //输出&& alert(item.id+"哈哈"+item.name);})
循环也有两种方法://方法一:
代码如下: $.each(arr,function(idx,item){&&&& && //输出&& alert(item.id+"哈哈"+item.name);})
//方法二:
代码如下:for(var key in arr){& alert(key);& alert(arr[key].status);&}
大家可以试试效果。
ajax返回JSON时的处理方式
&1,使用普通的aspx页面来处理&&&&&& 本人觉得这种方式处理起来是最简单的了,看下面的代码吧
代码如下:$.ajax({ &&&&&&&&&& type: "post", &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& url: "Default.aspx", &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& dataType: "json", &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& success: function (data) { &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& $("input#showTime").val(data[0].demoData); &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& error: function (XMLHttpRequest, textStatus, errorThrown) { &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& alert(errorThrown); &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& } &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& });&&&&&&&&& 这里是后台传递数据的代码&
代码如下:Response.Clear(); &&&&&&&&&&&&&&&&&&&&&&& Response.Write("[{"demoData":"This Is The JSON Data"}]"); &&&&&&&&&&&&&&&&&&&&&&& Response.Flush(); &&&&&&&&&&&&&&&&&&&&&&& Response.End();&
这种处理的方式将传递过来的数据直接解析为json数据,也就是说这里的前台js代码可能直接把这些数据解析成json对象数据,而并非字符串数据,如data[0].demoData,这里就直接使用了这个json对象数据
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行
12345678910

我要回帖

更多关于 空窗期是什么意思 的文章

 

随机推荐