为了账号安全,请及时绑定邮箱和手机立即绑定

将JavaScript对象或数组转换为json以获取Ajax数据

将JavaScript对象或数组转换为json以获取Ajax数据

ABOUTYOU 2019-11-15 17:00:46
所以我正在创建一个包含元素信息的数组。我遍历所有元素并保存索引。由于某种原因,我无法将此数组转换为json对象!这是我的数组循环:var display = Array();$('.thread_child').each(function(index, value){   display[index]="none";   if($(this).is(":visible")){      display[index]="block";   }});我尝试通过以下方式将其转换为JSON对象:data = JSON.stringify(display);它似乎没有发送正确的JSON格式!如果我像这样手工编码,它将起作用并发送信息:data = {"0":"none","1":"block","2":"none","3":"block","4":"block","5":"block","6":"block","7":"block","8":"block","9":"block","10":"block","11":"block","12":"block","13":"block","14":"block","15":"block","16":"block","17":"block","18":"block","19":"block"};当我在JSON.stringify对象上发出警报时,它看起来与手工编码的对象相同。但这是行不通的。我快要解决这个问题了!我在这里想念什么?发送此信息以获得手动编码格式的最佳方法是什么?我正在使用此ajax方法发送数据:$.ajax({        dataType: "json",        data:data,        url: "myfile.php",        cache: false,        method: 'GET',        success: function(rsp) {            alert(JSON.stringify(rsp));        var Content = rsp;        var Template = render('tsk_lst');        var HTML = Template({ Content : Content });        $( "#task_lists" ).html( HTML );        }    });使用GET方法是因为我正在显示信息(而不是更新或插入)。仅将显示信息发送到我的php文件。最终解决方案var display = {};$('.thread_child').each(function(index, value){   display[index]="none";   if($(this).is(":visible")){      display[index]="block";   }});$.ajax({        dataType: "json",        data: display,        url: "myfile.php",        cache: false,        method: 'GET',        success: function(rsp) {            alert(JSON.stringify(rsp));        var Content = rsp;        var Template = render('tsk_lst');        var HTML = Template({ Content : Content });        $( "#task_lists" ).html( HTML );        }    });
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

您可以使用JSON.stringify(object)一个对象,而我刚刚编写了一个函数,它将以递归方式将数组转换为对象,例如this JSON.stringify(convArrToObj(array)),它是以下代码(可以在此答案上找到更多详细信息):


// Convert array to object

var convArrToObj = function(array){

    var thisEleObj = new Object();

    if(typeof array == "object"){

        for(var i in array){

            var thisEle = convArrToObj(array[i]);

            thisEleObj[i] = thisEle;

        }

    }else {

        thisEleObj = array;

    }

    return thisEleObj;

}

为了使它更通用,您可以重写该JSON.stringify函数,而不必担心它,只需将其粘贴在页面顶部即可:


// Modify JSON.stringify to allow recursive and single-level arrays

(function(){

    // Convert array to object

    var convArrToObj = function(array){

        var thisEleObj = new Object();

        if(typeof array == "object"){

            for(var i in array){

                var thisEle = convArrToObj(array[i]);

                thisEleObj[i] = thisEle;

            }

        }else {

            thisEleObj = array;

        }

        return thisEleObj;

    };

    var oldJSONStringify = JSON.stringify;

    JSON.stringify = function(input){

        return oldJSONStringify(convArrToObj(input));

    };

})();

而现在JSON.stringify会接受arrays还是objects!(通过示例链接到jsFiddle)


编辑:


这是另一个效率更高的版本,尽管它的可靠性可能会也可能不太低(不确定-取决于是否JSON.stringify(array) 总是返回[],我看不出为什么不会返回,所以这个功能应该是更好,因为JSON.stringify与一起使用时,它的工作量少了一些object:


(function(){

    // Convert array to object

    var convArrToObj = function(array){

        var thisEleObj = new Object();

        if(typeof array == "object"){

            for(var i in array){

                var thisEle = convArrToObj(array[i]);

                thisEleObj[i] = thisEle;

            }

        }else {

            thisEleObj = array;

        }

        return thisEleObj;

    };

    var oldJSONStringify = JSON.stringify;

    JSON.stringify = function(input){

        if(oldJSONStringify(input) == '[]')

            return oldJSONStringify(convArrToObj(input));

        else

            return oldJSONStringify(input);

    };

})();


查看完整回答
反对 回复 2019-11-15
  • 2 回答
  • 0 关注
  • 424 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信