我正在尝试发布一些由PHP处理的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+']'},
});
$_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
?>
答案 0 :(得分:0)
你不能只使用json_decode吗?
答案 1 :(得分:0)
如果您的数据来自表单,您将需要使用下面的一些代码,如果不是全部的话。这段代码采用了一个jquery表单对象,并以适当的方式stringify
,您可以轻松地执行类似
$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
库:http://www.crockford.com/javascript/jsmin.html
答案 2 :(得分: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
这不是你想要做的吗?