首頁  >  文章  >  web前端  >  ajax前端的關聯數組轉json到後台方法

ajax前端的關聯數組轉json到後台方法

php中世界最好的语言
php中世界最好的语言原創
2018-03-16 10:28:442162瀏覽

這次帶給大家ajax前端的關聯數組轉json到後台方法,ajax前端的關聯數組轉json到後台的注意事項有哪些,下面就是實戰案例,一起來看一下。

很多人碰到過ajax傳值時無法直接傳數組,而百度的大多數都是不能用的

所以我想到了一個方法:

#第一步:將陣列轉換為json字串

這是一個技術性的問題,百度說的JSON.stringify(arr)是不能轉換關聯數組的,甚至索引陣列也是有很多缺點

所以我刻意封裝了個js遞迴函數

function arrToJSON(arr) {
    var json = {};
    for (var i in arr) {
        var vo=arr[i];
        if (typeof arr[i] == "object") {
            json[i]={};
            json[i] = arrToJSON(vo);
        } else {
            json[i] =vo;
        }
    }
    return JSON.stringify(json);
}

只要傳入js多維陣列,能把陣列全部解析為字串

這樣就可以在ajax裡面傳值啦~~~

第二步:

但是這樣轉換成的json字串是不完整的,不能直接解析出全部的數組

如圖

ajax前端的關聯數組轉json到後台方法

#可以發現,這個函數會將下級的子json字串給用斜槓轉義,越往下走斜線越多,

當後台json_decode 處理第一層級時,第二層其實仍是json_decode字串

所以後台需要一個新的decode函數用來解析這個json字串

/**
 * 解析前台传来的不完整json字符串
 */
private function json_decode_x($str)
{
    $data_arr = array();
    $arr = json_decode($str, 1);
    foreach ($arr as $x => $a) {
        if (preg_match('/":/', $arr[$x])) { //匹配
            $data_arr[$x] = $this->json_decode_x($a);
        } else {
            $data_arr[$x] = $a;
        }
    }
    return $data_arr;
}

這樣的話,後台接收到json字串,用這個函數解析,就可以得到完整正確的多維數組了

由於我的業務需求,是沒有/" 這樣的字串的,所以可以用這個來判斷子字串是否還有json字串可以解析,如果用到實際上項目,請修改該正則判斷

當然有能力的人可以直接第一步改成完整的json字符串,這樣後台可以直接用一個json_decode解析

#相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

##js與canvas合成圖片做出微信公眾號海報功能

#

以上是ajax前端的關聯數組轉json到後台方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn