programing

javascript 객체 또는 어레이를 ajax 데이터의 json으로 변환

powerit 2023. 3. 9. 22:24
반응형

javascript 객체 또는 어레이를 ajax 데이터의 json으로 변환

요소 정보를 사용하여 어레이를 만듭니다.모든 요소를 루프하여 인덱스를 저장합니다.어떤 이유로 이 어레이를 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 );
        }
    });

JSON에서 어레이를 시리얼화하는 방법에 대해서는 잘 모르겠습니다.문제를 분리해 봅시다.다음 코드를 고려하십시오.

var display = Array();
display[0] = "none";
display[1] = "block";
display[2] = "none";

console.log( JSON.stringify(display) );

인쇄:

["none","block","none"]

이것이 JSON이 실제로 어레이를 시리얼화하는 방법입니다.그러나 보고 싶은 것은 다음과 같습니다.

{"0":"none","1":"block","2":"none"}

이 형식을 가져오려면 배열이 아닌 개체를 직렬화할 수 있습니다.위의 코드를 다음과 같이 고쳐 쓰겠습니다.

var display2 = {};
display2["0"] = "none";
display2["1"] = "block";
display2["2"] = "none";

console.log( JSON.stringify(display2) );

원하는 형식으로 인쇄됩니다.

http://jsbin.com/oDuhINAG/1/edit?js,console 에서 조작할 수 있습니다.

사용할 수 있습니다.JSON.stringify(object)오브젝트를 사용하여 어레이를 오브젝트로 재귀적으로 변환하는 함수를 썼습니다.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);
    };
})();

여기서 예를 들어 jsFiddle

여기서 js 퍼포먼스 테스트, jsPerf 경유

언급URL : https://stackoverflow.com/questions/19970301/convert-javascript-object-or-array-to-json-for-ajax-data

반응형