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);
};
})();
언급URL : https://stackoverflow.com/questions/19970301/convert-javascript-object-or-array-to-json-for-ajax-data
'programing' 카테고리의 다른 글
Angular Clear 보조양식 데이터 및 재설정 유효성 검사 (0) | 2023.03.09 |
---|---|
TypeError: ObjectId("")는 JSON을 직렬화할 수 없습니다. (0) | 2023.03.09 |
각도에서 jquery 대화상자를 여는 가장 좋은 방법은 무엇입니까? (0) | 2023.03.09 |
창 innerWidth의 AngularJS 이벤트 크기 변경 (0) | 2023.03.09 |
react-module이 하위 구성 요소에서 이.module.location을 가져옵니다. (0) | 2023.03.09 |