2010-01-06 6 views
0

데이터베이스에서 jSON 인코딩 된 문자열을 가져 와서 항목을 반복하려고하는데 어려움이 있습니다. 여기PHP json_encode results 및 jQuery

["volunteers","seat_dedication_program","memberships"] 

그리고 코드 :

//alert 
0 : volunteers 
//alert 
1 : seat_dedication_program etc... 

은 내가지고있어하는 것은 이것이다 :

//Looks for _checkbox when looping through my database fields (object dbVals) and turns it into a true jQuery array if it finds it. 
if(key.search(/_checkbox/i) > 0) var arr = $.makeArray(dbVals[key]); 

//If it is an array, loop through the array values and show them 
if($.isArray(arr)==true){ 
    $.each(arr, function(i, n){ 
     alert(i + " : " + n); 
    }); 
} 

는 내가 원하는 것은 이것이다

다음은 데이터베이스의 문자열입니다
//alert 
0 : ["volunteers","seat_dedication_program","memberships"] 

나는 모든 관련 데이터를 포함했다고 생각합니다. 에이. 아무도 왜 이런 일이 일어나는지 알아낼 수 있습니까?

감사합니다.

답변

1

$ .makeArray (..)를 사용하면 배열에주는 유일한 요소는 문자열입니다. 문자열을 JavaScript 객체로 파싱해야합니다. JSON2.js library을 사용하면 코드가 다음과 같이 해석됩니다.

var arr = JSON.parse(dbVals[key]); 

if($.isArray(arr)==true){ 
    $.each(arr, function(i, n){ 
     alert(i + " : " + n); 
    }); 
} 
+0

@Carl, 그게 내가 생각한 (유일한 요소는 내가 준 문자열이다)하지만 내가 php에서 json_encode를 사용할 때 왜 그걸 파싱해야합니까? – jay

+0

json_encode는 문자열을 반환합니다. 자바 스크립트에서 JSON으로 처리되도록하려면 문자열이 아니어야합니다. – Greg

+0

@Greg와 마찬가지로 json_encode는 문자열 (object -> string)을 제공합니다. PHP에서는 json_decode를 사용하여 객체로 돌아갑니다. JS에 있기 때문에 JSON.parse (..)는 json_decode에 대한 아날로그입니다. – Carl

0

그냥 루프 정기적를 사용

for (var i=0; i<arr.length; i++) { 
    var n = arr[i]; 
    alert(i + " : " + n); 
} 

또는 큰 배열을 위해, 약간 최적화 :

for (var i=0,l=arr.length; i<l; i++) { 
    var n = arr[i]; 
    alert(i + " : " + n); 
} 

또는 당신이 정말로 루프 싫어 경우 :

Array.prototype.each = function (callback) { 
    for (var index=0,l=this.length;index<l;index++) { 
     var item = this[index]; 

     // index is second arg since it's optional 
     callback(item,index); 
    } 
} 

arr.each(function(n,i){ 
    alert(i + " : " + n); 
}); 

하지만, 나는 라이브러리를 수정하거나 파이어 폭스가 갑자기 자기 자신을 구현하기로 결정했을 때 충돌을 피하기 위해 for 루프를 추천한다.배열에 대한 방법 (일부 라이브러리는 이미 이것에 물렸습니다).

+0

이것은 던져의 오류가 – jay

+0

그것은이 영업 이익은 배열 변수로 arr''사용하기 때문에 편곡 정의되지 던질 수없고, 이미'$ .isArray (편곡) == TRUE ' – slebetman

+0

을 확인했다 "정의되지 ARR" 그리고 아직 그렇습니다. – jay