2014-06-17 3 views
0

저는 json_encode라는 PHP 배열을 가지고 있으며 자바 스크립트 함수에서 변수에 전달합니다. 모든게 괜찮아 보이고, Json 인코딩 후에 배열은 유효한 자바 스크립트 배열처럼 보이지만 출력에서는 계속 정의되지 않습니다.json_encode가 자바 스크립트에서 undefined를 반환합니다.

<script src="js/jquery-1.8.1.min.js"></script> 
<script> 
    $(function() { 
    getPhotos(); 
    }); 

    function getPhotos() { 
    var photosArray= <?php echo json_encode($photos_array); ?>; 
    alert(photosArray.length); 
} 

그리고 여기가 브라우저에서 어떻게 보이는지 :

function getPhotos() { 
    var photosArray= {"12":"1401880321163321491.png","11":"1401880200994911748.jpg","10":"1401866598206920573.png","6":"1401863850983364637.png","7":"14018645731921210607.png","8":"14018646851258457972.png","9":"14018647281804140101.png","13":"1401880485229593545.png","15":"1401933387756388853.jpg","16":"14019688951333867090.jpg","17":"14021062501374960169.jpg","18":"14021064801222019341.jpg","19":"14021065441073158757.png","20":"14021066841708486619.png","21":"1402106744569372168.png","22":"14022970452004604041.jpg","23":"1402297585941206466.jpg"}; 
    alert(photosArray.length); 
} 

내가 잘못 아무것도하고있는 코드가 어떻게 보이는지 여기있어?

답변

0

이것은 자바 스크립트 객체이며 배열이 아니므로 길이 속성이 없습니다. 그것은 또한 순서가 없습니다.

시도해보십시오. 결과를 보려면 alert(photosArray['11'])을 클릭하십시오.

+0

이러한 숫자는 실제로 mysql 데이터베이스에있는 사진의 ID입니다. 당신은 나에게 가치를 얻는 방법을 보여 줬어. 어레이를 순환하여 키를 얻는 방법이 있습니까? – user3423909

+0

@ user3423909 : [어떻게 자바 스크립트 개체의 속성을 열거합니까?] (http://stackoverflow.com/q/85992/218196) –

1

배열이 배열로 사용되지 않습니다. 개체입니다. JavaScript의 객체에는 길이 속성이 없습니다 (당연히 객체를 만들지 않는 한).

문자열을 인덱스로 사용하는 것처럼 PHP 배열을 만드는 것은 무엇이든 보입니다. 그것들이 실수가 아닌지 확인하십시오. PHP에서는 연관 배열이라는 개념을 가진 PHP가 괜찮습니다. 자바 스크립트에서 JSON으로 인코딩하면 객체 리터럴이됩니다. 당신이 원하는

{"1":"1401880321163321491.png", // ... 

을 : : 반복하려면

, 당신이 원하지 않는 당신의 PHP 배열의 배열 인덱스가 숫자 1 인 경우

["1401880321163321491.png", // ... 

에서만 가능하다고과 문자열이 아닙니다. "1". 어레이가 "스파 스 (sparse)"이기 때문에 문제가 발생할 수 있습니다.이 배열은 일반 배열 리터럴로 복제 할 수 없습니다. 배열 리터럴에서는 인덱스를 건너 뛸 수 없습니다.

+0

이러한 인덱스는 실제로 mysql 데이터베이스의 ID입니다. – user3423909

+0

@ user3423909 그럼 네가 어쨌든 배열을 사용하고 싶지 않을 것이다! 이 경우에는 반드시 개체를 사용해야합니다. 그렇지 않으면 키 정렬 방법을 어떻게 예상합니까? 객체에서 키/값 쌍의 수를 계산해야한다면 Underscore.js에서'.size()'구현을 사용해보십시오. http://underscorejs.org/#size – Brad

+0

@ user3423909 이제 루프를 반복해야한다고 ...이 세부 정보를 질문에 넣으십시오. Underscore.js는 잘 작동하는'.each()'메소드도 가지고 있습니다. 객체에 따라 상당히 복잡해질 수도 있고, for ... in 루프처럼 간단 할 수도 있습니다. – Brad

관련 문제