3

JSオブジェクトを正確な文字列に変換できません。コードは次のとおりです。

jsonObj['payment_value']=100.10;
jsonObj['payment_date']="2012-06-15";
jsonObjStr = JSON.stringify(jsonObj);
alert(jsonObjStr);
$.post("test", jsonObjStr.toString(), function(output){
    alert(output);
});

最初のアラートが表示されます:

{"payment_date": "2012-06-15"、 "payment_value":100.1}

そして、機能テスト(私はcodeigniterフレームワークを使用しています)では、「payment_date」と「payment_value」を次のようなコードで出力する必要があります。

echo $this->input->post("payment_value");
echo $this->input->post("payment_date");

これは「クリア」phpで次のように相当します。

echo $_POST["payment_value"];
echo $_POST["payment_date"];

しかし、2番目のアラートは明確な文字列を表示します。

入れたら

{"payment_date": "2012-06-15"、 "payment_value":100.1}

jsonObjStr.toString()の代わりに正常に動作します

誰かがjson_decodeを使用せずにそれを修正する方法を知っていますか?他の配列ではなく、この形式で値を投稿する必要があります

したがって、jsonObjStrを文字列に正確に変換する必要があります(関数eval()とは逆になります)

アドバイスありがとう

4

1 に答える 1

4

$ .post docsによると、2番目の引数はマップまたはクエリ文字列である必要があります。

マップの例:

{
   "payment_date":"2012-06-15",
   "payment_value":100.1
}

クエリ文字列の例:

'payment_date=2012-06-15&payment_value=100.1​​​'

を使用するJSON.stringifyと、次のようになります。

'{"payment_date":"2012-06-15","payment_value":100.1}'

これは無効query stringです。したがって、解決策は次のとおりです。何も文字列化せず、オブジェクト自体を2番目の引数として渡します。

jsonObj['payment_value']=100.10;
jsonObj['payment_date']="2012-06-15";
$.post("test", jsonObj, function(output){
   alert(output);
});
于 2012-06-15T09:57:42.217 に答える