【问题标题】:how to convert a nested JSON object to a URL query string to pass by AJAX?如何将嵌套的 JSON 对象转换为 URL 查询字符串以通过 AJAX 传递?
【发布时间】:2018-11-05 16:24:40
【问题描述】:

我正在尝试使用 JavaScript(不带 jQuery)编写一个与 this tutorial 相关的 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.stringify 将整个嵌套 JSON 转换为字符串并将其传递给服务器,但您可能知道,如果我使用 jQuery 等库,您可以将嵌套 JSON 发送到服务器而且您不需要在服务器上解码字符串。 这个问题的重点就是像 jQuery 这样的库是如何将数据传递给服务器的,您可以直接获取它而无需任何解码?

【问题讨论】:

    标签: javascript ajax xmlhttprequest query-string


    【解决方案1】:

    你可以通过两种方式解决这个问题

    1. 您需要将嵌套数据作为字符串发送

      postAjax(url, { p1: 1, p2: JSON.stringify({ 'test_name': 'Hello World' }) }, function(data) { console.log(data); });

    2. 将完整数据作为字符串传递

    检查这个https://stackoverflow.com/a/39519299/6236938

    【讨论】:

    • 是的,我可以,但是当我使用 jQuery 时,我可以使用 $_POST 或 $_GET 直接在服务器中获取发送的数据,我不需要对其进行解码。我正在尝试找出 jQuery 是如何传递数据的
    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多