2

PHP で処理する JSON データを POST しようとしています。サーバー側に到着すると、データはエスケープされ、確実にエスケープ解除できません。

    var jsondata = '{"name":"Foo","email":"name@address.com"},{"name":"Bar","email":"name@address.com"}';
    $.ajax({
        type: "POST",
        url: "save.php",
        dataType: "json",
        processData: false,
        data: { json: '['+jsondata+']'},
    });

$_POST['json']次に含まれます:

[{\"name\":\"Foo\",\"email\":\"name@address.com\"},{\"name\":\"Foo\",\"email\":\"name@address.com\"}]

エンコードされていない JSON ポストデータを送信するにはどうすればよいですか? 私processData: falseはそれをカバーすると思った。


サーバー側のエラーを説明するには:

<?php

$_POST['json-bad'] = '[{\"name\":\"Foo\",\"email\":\"name@address.com\"},{\"name\":\"Foo\",\"email\":\"name@address.com\"}]';
$data_bad = json_decode($_POST['json-bad']);
var_dump($data_bad); // returns "NULL"

$_POST['json-good'] = '[{"name":"Foo","email":"name@address.com"},{"name":"Bar","email":"name@address.com"}]';
$data_good = json_decode($_POST['json-good']);
var_dump($data_good); // returns array as expected

?>
4

3 に答える 3

0

If your data is coming out of a form, you'll want to use some of the code below, if not all of it. This code takes a jquery form object and will stringify it in an appropriate fashion where you can easily do something like

$json = json_decode($_POST['json'], true); 
echo $json['email'];

Here is the JS

$.ajax({
    type: "POST",
    url: "save.php",
    dataType: "json", //NOTE: indicates data type being RETURNED, not PASSED
    processData: false,
    data: { json: getJson( $('#formId') )} //NOTE: REMOVE THIS EXTRA COMMA
});


function getJson(o){
    return (JSON.stringify(o.serializeObject()));   
}
$.fn.serializeObject = function(){
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name]) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};  

NOTE: Older browsers require you to inclide the json2.js library found here: http://www.crockford.com/javascript/jsmin.html

于 2012-11-05T15:17:38.163 に答える
0

JSON (JavaScript Object Notation) は、JavaScript 形式でオブジェクトを表現する単純な方法です。

オブジェクトを JavaScript からサーバーに渡すだけでよいという印象を受けました。

その場合、特定の操作を行う必要はありません

persons = {"name":"Foo","email":"name@address.com"},{"name":"Bar","email":"name@address.com"};
$.ajax({
    type: "POST",
    url: "save.php",
    dataType: "json",
    processData: false,
    data: {'persons': persons},
});

サーバー側で

echo $_POST['persons'][0]['name'];

あなたが得る

Foo

それはあなたがやろうとしていることではありませんか?

于 2012-11-05T15:38:05.430 に答える
0

json_decodeを使用することはできませんか?

于 2012-11-05T14:40:02.470 に答える