发送非空json数据作为自定义格式的查询字符串
Send non-empty json data as query string with custom format
尝试通过GET发送json数据。
Json数据:
var data = {
country: {
name: "name",
code: 1
},
department: {},
cars: ["bmw", "ferrari"],
books: []
}
发送代码:var posting = $.ajax({
url: "/do",
type: "GET",
traditional: true,
data: data,
dataType: "json"
});
posting.done(function (data) {
// handle result
});
如果traditional=true(已解析、已解码)查询字符串为
country[name]:name
country[code]:1
cars[]:bmw
cars[]:ferrari
如果traditional=false(已解析、已解码)查询字符串为
country:[object Object]
department:[object Object]
cars:bmw
cars:ferrari
期望的应该是
country:{"name": "name", "code":1}
cars:bmw
cars:ferrari
或
country:{"name": "name", "code":1}
cars:["bmw", "ferrari"]
换句话说,应该省略空对象和数组。对象应该被正确编码。尝试了不同的contentType和JSON.stringify()没有运气。有办法吗?
根据我的理解,我理解的问题是在url中发送多维json数组。我在本地主机上测试以下代码。希望这对你有帮助。我比你的名气小得多,但我只是想帮忙。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script>
var data = {
country: {
name: "name",
code: 1
},
department: {},
cars: ["bmw", "ferrari"],
books: []
}
data = $.param(data);
var posting = $.ajax({
url: "test.php",
type: "GET",
traditional: true,
data: data,
dataType: "json"
});
posting.done(function (data) {
console.log(data);
});
</script>
PHP文件 <?php
echo "<pre>"; print_r($_REQUEST); echo "</pre>";
?>
结果我得到
<pre>Array
(
[country] => Array
(
[name] => name
[code] => 1
)
[cars] => Array
(
[0] => bmw
[1] => ferrari
)
)
</pre>
JS Fidle演示
var data = {
country: {
name: "name",
code: 1
},
department: {},
cars: ["bmw", "ferrari"],
books: []
};
function isEmpty(obj)
{
for(var prop in obj)
{
if(obj.hasOwnProperty(prop))
return false;
}
return true;
}
function removeFirstLevelEmptyPropertiesFromJSON(obj)
{
var isArray = obj instanceof Array;
for (var k in obj)
{
if (obj[k] instanceof Array)
{
if(obj[k].length == 0)
delete obj[k];
}
else
{
if(isEmpty(obj[k]))
delete obj[k];
}
}
}
removeFirstLevelEmptyPropertiesFromJSON(data);
var modifiedData = JSON.stringify(data);
alert(modifiedData);
我通过在一个键=值对中发送整个对象来更改发送json数据的逻辑:
$.each(data, function (key, value) {
if ($.isEmptyObject(value)) {
delete data[key];
}
});
var posting = $.ajax({
url: "/do",
type: "GET",
traditional: false,
data: "data=" + JSON.stringify(data),
dataType: "json"
});
相关文章:
- Google Sheets自定义函数条件格式
- 自定义angularjs过滤器日期时间格式额外字符
- 将serializeArray()自定义为不同的数组格式
- angularjs中的自定义时间格式
- 剑道 UI - 自定义数字格式在 2015.3.1111 > 2016.1.412 之间更改
- 格式图例中的自定义系列顺序
- 使用自定义格式momentJS时时间无效
- DataTables自定义日期格式排序
- 使用J-query数据表,美国日期格式的自定义排序不起作用
- 谷歌脚本的自定义日期格式
- 将自定义格式添加到 joomla 中的 Tinymce 编辑器中
- HTML5 剪贴板 API:粘贴自定义格式
- 在自定义格式的Javascript中解析“日期和时间”字符串
- 自定义日期格式的正则表达式
- 将 AngularJS 中的时间戳格式化为自定义要求
- 此数据的格式是什么?是自定义格式吗?
- 在javascript中将日期转换为自定义格式
- 使用React为Google Maps v3自定义套印格式
- Javascript自定义函数,用于将JSON格式的YQL查询响应导入谷歌电子表格
- 带有自定义格式的C#Web服务json数据jquery ui