javascript - 如何将嵌套的 JSON 对象转换为 URL 查询字符串以通过 AJAX 传递?
问题描述
我正在尝试使用 JavaScript(没有 jQuery)编写一个与本教程相关的 Ajax 请求,我现在有这个功能:
function postAjax(url, data, success) {
var params = typeof data == 'string' ? data : Object.keys(data).map(
function(k){ return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) }
).join('&');
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xhr.open('POST', url);
xhr.onreadystatechange = function() {
if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); }
};
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(params);
return xhr;
}
我可以使用 JSON 格式发送数据,如下所示:
postAjax(MY_SERVER_URL, { p1: 1, p2: 'Hello World' }, function(data){ console.log(data); });
在服务器上,我只有print_r($_POST)
,那么输出是:
Array
(
[p1] => 1
[p2] => Hello World
)
但是当我有一个嵌套的 JSON 时,它会将我显示[object Object]
为输出,而不是我的 JSON 中的每个数组和对象。例如:
postAjax(url, { p1: 1, p2: {'test_name':'Hello World'} }, function(data){ console.log(data); });
输出:
Array
(
[p1] => 1
[p2] => [object Object]
)
您能否指导我如何将嵌套的 JSON 转换为 URL 查询字符串以通过 AJAX 传递?
更新
请注意,我可以使用将整个嵌套 JSON 转换为字符串JSON.stringify
并将其传递给服务器,但您可能知道,如果我使用 jQuery 等库,您可以将嵌套 JSON 发送到服务器,而您不需要解码服务器上的字符串。这个问题的重点是像 jQuery 这样的库是如何将数据传递给服务器的,您可以直接获取它而无需任何解码?
解决方案
您可以使用两种方式解决此问题
您需要将嵌套数据作为字符串发送
postAjax(url, { p1: 1, p2: JSON.stringify({ 'test_name': 'Hello World' }) }, function(data) { console.log(data); });
将完整数据作为字符串传递