Zend Fraamewark 1.12でajaxから伝えられたjsonデータを受け取ります.
まず、私たちがよく言っているjsonの対象は実は間違っています.実際にはjavascriptの対象を指しています.javascript言語サポートはjson形式でオブジェクトを作成します.文章を書いてみたら、完璧な話です.http://www.cnblogs.com/TomXu/archive/2012/01/11/2311956.html
したがって、jsonデータを転送するには、一般的にはjson形式の規範に合った文字列を渡すだけで、contentTypeを「aplication/json」に設定し、javascriptオブジェクト(いわゆるJsonオブジェクト)を渡すと、過去のオブジェクトをkey=value&key 1=value 1のフォーマットに変換します.このような変換の後、文字列はjson形式に合わないので、バックグラウンドのプログラムはjsonオブジェクトとして扱われません.
私たちはプログラムで合法的なjson文字列かどうかを判断できます.PHP言語で、Zend Frame eworkフレームの下で例を示します.
フロントエンドのjavascriptコードを仮定すると、次のようになります.
一つの方法は、contentType:「aplication/json」を削除して、デフォルトのaplication/x-wn-form-urlencodedにして、次のコードのような値を得ることです.
echo$this->get Request()->getParam("value")[0];
第二の方法は呼び出し方法のパース_である.str()は、変数値を直接解析します.注意:転送contentType:「aplication/json」というタイプのデータは、通常はrequestのget RawBody()方法で取得されます.
実は上のクッションを通して大体を知ることができます.まず、Json文字列をバックグラウンドに伝えなければなりません.バックグランドはこの本物の文字列を獲得してPHP自身の対象に変えます.PHP環境では、contentType:「appication/json」というタイプのデータを転送するために、通常はrequestのget RawBody()方法を用いて、元のpost要求の情報を取得する.サンプルコードは以下の通りです.
したがって、jsonデータを転送するには、一般的にはjson形式の規範に合った文字列を渡すだけで、contentTypeを「aplication/json」に設定し、javascriptオブジェクト(いわゆるJsonオブジェクト)を渡すと、過去のオブジェクトをkey=value&key 1=value 1のフォーマットに変換します.このような変換の後、文字列はjson形式に合わないので、バックグラウンドのプログラムはjsonオブジェクトとして扱われません.
私たちはプログラムで合法的なjson文字列かどうかを判断できます.PHP言語で、Zend Frame eworkフレームの下で例を示します.
フロントエンドのjavascriptコードを仮定すると、次のようになります.
<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>
伝えられたのはjsonsdataで、これはjavascriptオブジェクトです.その後、楽屋に伝えてjson形式に合うかどうかを判断します.$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%5 B%5 D=w 2&value%5 B%5 D=3で、楽屋ではjson形式でこのようなデータを処理できません.一つの方法は、contentType:「aplication/json」を削除して、デフォルトのaplication/x-wn-form-urlencodedにして、次のコードのような値を得ることです.
echo$this->get Request()->getParam("value")[0];
第二の方法は呼び出し方法のパース_である.str()は、変数値を直接解析します.注意:転送contentType:「aplication/json」というタイプのデータは、通常はrequestのget RawBody()方法で取得されます.
$rawBody=$this->getRequest()->getRawBody();
parse_str($rawBody);
echo $value[0];
それはちょっとここの目的から逸れています.どうやってjsonを処理するかを紹介します.実は上のクッションを通して大体を知ることができます.まず、Json文字列をバックグラウンドに伝えなければなりません.バックグランドはこの本物の文字列を獲得してPHP自身の対象に変えます.PHP環境では、contentType:「appication/json」というタイプのデータを転送するために、通常はrequestのget RawBody()方法を用いて、元のpost要求の情報を取得する.サンプルコードは以下の通りです.
<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>
バックグラウンドコード: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
";
$o=(object)$json;
echo $o->value1[0],$o->value1[1],$o->value2,"\r
";//
}
$this->getHelper("layout")->disableLayout();
$this->getHelper("viewRenderer")->setNoRender(true);
}
上記のコードは、json文字列がphpバックグラウンドに伝達され、配列またはオブジェクトに変換される方法を示しています.ご参考までに.