2012-06-22 2 views
0
/* Helper function to clean up any current data we have stored */ 
function insertSerializedData(ids, type) { 
    // Get anything in the current field 
    current_data = $('#changes').val(); 
    if (!current_data) { 
     var data = new Array(); 
     data[type] = ids; 
     $('#changes').val(JSON.stringify(data)); 
    } else { 
     var data = JSON.parse($('#changes').val()); 
     data[type] = ids; 
     $('#changes').val(JSON.stringify(data)); 
    } 
    console.log($('#changes').val()); 
} 

다음 함수를 사용하여 데이터를 현재 JSON 객체에 추가하거나 새 JSON 객체를 모두 만들어 나중에 PHP에서 사용합니다. FF에 대해서만 stringify() 메서드가 있습니까? Google 크롬을 사용하고 있으며 conosole.log() 함수를 사용할 때 빈 객체가 나타납니다 ...JSON 문자열 화 관련 문제?

같은 키로 두 개의 값을 저장하려고하면 어떻게됩니까? 나는 그것을 덮어 씌울 것이라고 생각한다. 그래서 중복 된 것을 보이지 않게하기 위해 최종 배열에 무작위로 수학 숫자를 더해야한다.

감사합니다 :)이 라인이 문제가 발생할 수 있습니다

+1

'JSON.stringify'는 Chrome 및 IE 8 이상에 존재합니다. 귀하의 오류는 다른 것입니다. 'JSON.stringify '를 호출하기 전에'console.log (data)'를 호출 해보십시오. –

+0

난수는 유일성을 보장하지 않으며 단지 발생 확률을 줄입니다. 중요한 경우 고유 한 필드 이름을 보장하기 위해 색인을 추적하고 이동하면서 색인을 증가시켜야합니다. –

+0

JSON 구문 분석 지원을위한 유용한 호환성 표는 다음과 같습니다. http://caniuse.com/json – Cecchi

답변

2

:

var data = new Array(); 
data[type] = ids; 

... 자바 스크립트에서 배열은 꽤 PHP에서 배열처럼 때문이다. 그래서 저는 그것은 또한 var 로컬로 선언해야합니다, 당신은

var data = {}; 
data[type] = ids; 

게다가, current_data이 기능에 대한 로컬 것 같다 의해 ... 더 나은 표현 무엇을 의미하는지 가정합니다. 유사한 문제가 jQuery .data() 메소드에서 이미 구현되었다는 것을 제외하고는 다른 문제는 볼 수 없습니다.

업데이트 : 여기에 jsFiddle (이)가 있습니다.) 배열 객체 불일치처럼 실제로 시도한 것에서 실제로 그 Chrome 동작이 발생했습니다.

+0

다음은 모두 유효한 설명이지만 그 중 아무 것도 질문에 대한 답변이 아닙니다. –

+0

고마워요. 작동했습니다. – MasterGberry

0

약간 형식을 다시 지정했는데 이것이 작동하는 것 같습니다. #changes 요소의 "value"속성을 JSON 문자열로 설정합니다. type 인수는 할당하려고하는 배열의 인덱스라고 가정합니다.

function insertSerializedData(ids, type) { 
    var changes = jQuery('#changes'), arr, val = changes.val(); 
    if (!val) { 
    arr = []; 
    arr[type] = ids; 
    changes.val(JSON.stringify(arr)); 
    } else { 
    arr = JSON.parse(val); 
    arr[type] = ids; 
    changes.val(JSON.stringify(arr)); 
    } 
    console.log(changes); 
} 
+0

인덱스를 유형으로 사용하면 메모리 낭비가됩니다.)'var x = []; x [99] = 99;'x.length'는 배열이 효율적으로 하나의 요소 만 저장하더라도 100이됩니다. – raina77ow

+0

내 솔루션이 기능적으로 작동한다고 생각하지만, 차선책이라고 생각합니다. 그러나 배열에 100 개의 항목을 포함하는 버킷의 드롭입니다. –