Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 发布一个未scaped的JSON数组_Jquery_Json - Fatal编程技术网

Jquery 发布一个未scaped的JSON数组

Jquery 发布一个未scaped的JSON数组,jquery,json,Jquery,Json,我试图发布一些JSON数据,供PHP处理。 当数据到达服务器端时,数据将被转义,我无法可靠地将其取消转义 var jsondata = '{"name":"Foo","email":"name@address.com"},{"name":"Bar","email":"name@address.com"}'; $.ajax({ type: "POST", url: "save.php", dataType: "json",

我试图发布一些JSON数据,供PHP处理。 当数据到达服务器端时,数据将被转义,我无法可靠地将其取消转义

    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+']'},
    });
$\u POST['json']
然后包含:

[{\"name\":\"Foo\",\"email\":\"name@address.com\"},{\"name\":\"Foo\",\"email\":\"name@address.com\"}]
如何发送未编码的JSON post数据?我认为
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

?>

您不能直接使用吗?

如果您的数据来自表单,您可能需要使用下面的部分代码,如果不是全部代码的话。这段代码采用jquery表单对象,并将
以适当的方式字符串化
,您可以轻松地执行以下操作

$json = json_decode($_POST['json'], true); 
echo $json['email'];
这是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;
};  
注意:较旧的浏览器要求您包含此处找到的
json2.js
库:

JSON(JavaScript对象表示法)只是用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

这不是你想做的吗?

如果它不能被直接解码,你尝试过吗?是的,这就是我正在做的,但是如果数据包含双引号,它会严重损坏。这样的引号应该转义。你不能传递一个真正的JS对象吗?或者定义一个真实的对象并使用它进行转换。这个JSON对象数组本身不是JS对象吗?JSON在哪里生成?您的示例显示它是硬编码的。它是一个表单吗?不,很遗憾,返回
null
。如果数据是未经扫描/未编码传递的,它将起作用。