Zend Framework 1.12中接受ajax传来的json数据

简介:

首先要知道我们常所说的json对象其实是一个误说,实际上指的是javascript对象。javascript语言支持按照json格式的方式创建对象。转一篇文章,说的非常完善。http://www.cnblogs.com/TomXu/archive/2012/01/11/2311956.html

因此要传递json数据,通常都是传递一串符合json格式规范的字符串而已,并且将contentType设置成"application/json",如果传递的是javascript对象(即所谓的json对象),则会把传递过去的对象转换成 key=value&key1=value1的格式。由于这种转换后,字符串就不符合json格式,因此后台的程序无法把它当做json对象来处理。

我们可以用程序来判断是否是合法的json字符串,以PHP语言,在Zend Framework框架下为例。

假设前端的javascript代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script type= "text/javascript" >
    $( function (){
       jsondata={ "value" :[ "w2" ,3]};
         $( "#btnPost" ).click( function (){
         var  options = {
             type:  'POST' ,
             url:  "anypage" ,
             data: jsondata,
             success:  function  (result) {
               alert(result);
             },
             dataType:  "html" ,
             contentType: "application/json"
             };
         $.ajax(options);
       });
             });
</script>

传递的是一个jsondata,这是一个javascript对象,那么再传递到后台判断是否是符合json格式。

1
2
3
4
5
6
7
$contentType  $this ->getRequest()->getHeader( 'Content-Type' );
if ( strstr ( $contentType 'application/json' ))
{
   $rawBody = $this ->getRequest()->getRawBody();
   json_decode( $rawBody );
   echo  (json_last_error() == JSON_ERROR_NONE)?  "it's valid json data" : "Not a valid json data" ;
}

通过这段代码,我们点击按钮后,会弹出"Not a valid json data"对话框。它实际上传过去的字符串是value%5B%5D=w2&value%5B%5D=3,后台无法处理按json格式处理这样的数据,硬是要这样处理的话,

一种方法是去掉contentType:"application/json",使之成为默认的application/x-www-form-urlencoded,然后通过getParam的方法去获得值,比如下面的代码

echo $this->getRequest()->getParam("value")[0];

第二种方法是调用方法parse_str(),直接解析出变量值。注意:传递contentType:"application/json"这种类型的数据,通常都是采用request的getRawBody()方法获取。

1
2
3
$rawBody = $this ->getRequest()->getRawBody();
parse_str ( $rawBody );
echo  $value [0];

那这就有点偏离本文的目的:如何介绍处理json。

其实通过上面的一些铺垫,可以知道大概,首先,得传递Json字符串到后台,后台要获得这个正真的字符串后,转换成PHP自己的对象。在PHP环境中,要传递contentType:"application/json"这种类型的数据,通常都是采用request的getRawBody()方法,来获取原始的post请求的信息。示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script type= "text/javascript" >
$( function (){
     jsondata={ "value1" :[ "w2" ,3], "value2" :990}; //假设传递的是这样的数据
     $( "#btnPost" ).click( function (){
       var  options = {
       type:  'POST' ,
       url:  "anyAction" ,
       data: JSON.stringify(jsondata),
       success:  function  (result) {
         alert(result);
       },
       contentType: "application/json" ,
       dataType:  "html"
     };
     $.ajax(options);
     });
});
</script>

后台代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  function  anyAction()
{
   $contentType  $this ->getRequest()->getHeader( 'Content-Type' );
   if ( strstr ( $contentType 'application/json' ))
   {
       $rawBody = $this ->getRequest()->getRawBody();
       $json =Zend_Json::decode( $rawBody ); //此处$json就是一个数组,可以把它再次转换成对象
       echo  $json [ "value1" ][0], $json [ "value1" ][1], $json [ "value2" ], "\r\n" ;
       $o =(object) $json ;
       echo  $o ->value1[0], $o ->value1[1], $o ->value2, "\r\n" ; //转换成对象
   }
   $this ->getHelper( "layout" )->disableLayout();
   $this ->getHelper( "viewRenderer" )->setNoRender(true);
}

上述的代码,演示了json字符串传递到php后台,转换成数组,或者对象的方法。仅供参考。











本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/1310414,如需转载请自行联系原作者




相关文章
|
6天前
|
存储 JSON JavaScript
使用Python处理JSON格式数据
使用Python处理JSON格式数据
|
1天前
|
存储 JSON JavaScript
【chat-gpt问答记录】python将数据存为json格式和yaml格式
【chat-gpt问答记录】python将数据存为json格式和yaml格式
12 1
|
3天前
|
JSON 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在使用CDAS语法同步MySQL数据到Hologres时,如果开启了字段类型宽容模式,MySQL中的JSON类型会被转换为什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5天前
|
JSON API 数据格式
如何用 Python 的 requests 库发送 JSON 数据的 POST 请求
使用 requests 库发送 JSON 数据的 POST 请求是一个非常简单且实用的操作。通过将目标 URL 和 JSON 数据传递给 requests.post 方法,你可以轻松发送请求并处理响应。本篇文章介绍了从安装 requests 库,到发送 JSON 数据的 POST 请求,再到处理响应的整个流程。希望这篇文章能帮助你更好地理解并应用这个强大的 HTTP 请求库。
|
5天前
|
JSON Go 数据格式
【golang】json数据解析 - 嵌套json解析
【golang】json数据解析 - 嵌套json解析
8 0
|
7天前
|
JSON 数据格式 Python
python3 服务端使用CGI脚本处理POST的Json数据
python3 服务端使用CGI脚本处理POST的Json数据
21 6
|
7天前
|
JSON Java 数据格式
java读取接口返回的json数据 (二)
java读取接口返回的json数据 (二)
18 5
|
Web App开发 JSON 前端开发
ExtJS4.1:AJAX提交数据的三种方式,80%人都没用过第三种
原文 http://www.cnblogs.com/happyframework/archive/2013/04/27/3046810.html 参考资料 HTTP:https://zh.wikipedia.
1044 0
|
7月前
|
XML 前端开发 JavaScript
什么是Ajax和jquery
什么是Ajax和jquery
59 0
|
1月前
|
JSON 前端开发 Java
利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细
利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细
75 0