Javascript 如何将嵌套的JSON对象转换为URL查询字符串以通过AJAX传递?

Javascript 如何将嵌套的JSON对象转换为URL查询字符串以通过AJAX传递?,javascript,ajax,xmlhttprequest,query-string,Javascript,Ajax,Xmlhttprequest,Query String,我正在尝试在不使用jQuery的情况下使用JavaScript编写Ajax请求,与之相关的是,我现在有了这个函数: function postAjax(url, data, success) { var params = typeof data == 'string' ? data : Object.keys(data).map( function(k){ return encodeURIComponent(k) + '=' + encodeURI

我正在尝试在不使用jQuery的情况下使用JavaScript编写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\u r$\u 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.stringify将整个嵌套JSON转换为字符串,并将其传递给服务器,但您可能知道,如果我使用一些库,如jQuery,您可以将嵌套JSON发送到服务器,而无需在服务器上解码该字符串。这个问题的关键是,像jQuery这样的库是如何将数据传递给服务器的,您可以直接获取数据而无需任何解码?

您可以使用两种方法来解决这个问题

您需要以字符串形式发送嵌套数据

邮递网址{ p1:1, p2:JSON.stringify{ “测试名称”:“你好,世界” } },函数数据{ 控制台日志数据; };

以字符串形式传递完整数据


选中此项

您可以使用两种方法解决此问题

您需要以字符串形式发送嵌套数据

邮递网址{ p1:1, p2:JSON.stringify{ “测试名称”:“你好,世界” } },函数数据{ 控制台日志数据; };

以字符串形式传递完整数据


选中此项

是的,我可以,但当我使用jQuery时,我可以使用$\u POST或$\u get直接在服务器中获取发送的数据,而不需要对其进行解码。我试图找出jQuery是如何传递数据的是的,我可以,但当我使用jQuery时,我可以使用$\u POST或$\u get直接在服务器中获取发送的数据,而不需要对其进行解码。我试图找出jQuery是如何传递数据的