Jquery 发布一个未scaped的JSON数组
我试图发布一些JSON数据,供PHP处理。 当数据到达服务器端时,数据将被转义,我无法可靠地将其取消转义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",
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
。如果数据是未经扫描/未编码传递的,它将起作用。