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