簡體   English   中英

如何將嵌套的JSON對象轉換為URL查詢字符串以通過AJAX傳遞?

[英]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之類的庫是如何將數據傳遞到服務器的,而您無需解碼就可以直接獲取數據?

您可以使用兩種方法解決此問題

  1. 您需要將嵌套數據作為字符串發送

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

  2. 將完整數據作為字符串傳遞

檢查此https://stackoverflow.com/a/39519299/6236938

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM