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

所以我正在创建一个包含元素信息的数组。我遍历所有元素并保存索引。由于某种原因,我无法将此数组转换为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 );

        }

    });


ABOUTYOU
浏览 425回答 2
2回答

UYOU

您可以使用JSON.stringify(object)一个对象,而我刚刚编写了一个函数,它将以递归方式将数组转换为对象,例如this JSON.stringify(convArrToObj(array)),它是以下代码(可以在此答案上找到更多详细信息):// Convert array to objectvar 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);    };})();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript