Как преобразовать вложенный объект JSON в строку запроса URL-адреса для передачи по AJAX? - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь написать Ajax-запрос, используя JavaScript (без jQuery) и связанный с этим руководством , у меня есть эта функция:

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, передает данные на сервер, чтобы вы могли получить их напрямую без какого-либо декодирования?

1 Ответ

0 голосов
/ 26 мая 2018

Вы можете решить эту проблему, используя двусторонний

  1. Вам необходимо отправить вложенные данные в виде строки

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

  2. Передать полные данные в виде строки

отметьте это https://stackoverflow.com/a/39519299/6236938

...