[英]how to convert a nested JSON object to a URL query string to pass by 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.stringify
將整個嵌套的JSON轉換為字符串,然后將其傳遞到服務器,但是您可能知道,如果我使用jQuery之類的庫,則可以將嵌套的JSON發送到服務器,而您不會無需在服務器上解碼字符串。 這個問題的重點在於,像jQuery之類的庫是如何將數據傳遞到服務器的,而您無需解碼就可以直接獲取數據?
您可以使用兩種方法解決此問題
您需要將嵌套數據作為字符串發送
postAjax(url, { p1: 1, p2: JSON.stringify({ 'test_name': 'Hello World' }) }, function(data) { console.log(data); });
將完整數據作為字符串傳遞
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.