2011-02-17 3 views
1

$ result라는 PHP 변수에 배열이 있습니다. 내가 echo json_encode($result);을 수행 할 때이상한 JSON 동작, javascript 변수의 범위

내가 얻을 :

[{"id":"4","rank":"adm","title":"title 1"}, 
{"id":"2","rank":"mod",,"title":"title 2"}, 
{"id":"5","rank":"das","title":"title 3"}, 
{"id":"1","rank":"usr""title":"title 4"}, 
{"id":"3","rank":"ref","title":"title 5"}] 

그러나 나는 시도는 경고를 사용하여 동일한 얻을 수있는 다른 결과를 얻을. 다음은 그 예입니다. 내가 할

<script type="text/javascript"> 
//<![CDATA[ 
$(document).ready(function() { myArray = <?=json_encode($result);?>; }); 
$('img.delete').click(function() { alert(myArray); } 
//]]> 
</script> 

경고는 [나는 확실하지 않다 object Object],[object Object], ...

이지만, 변수 myArray가 제대로 $('img.delete').click(function()으로 수행하기되지 않은 것으로 보인다.

+1

이상하게 보이지 않습니다 ... –

+0

id2에 이중 쉼표가 있고 id1에는 쉼표가 없습니다 (잘못된 json이 아닙니다). 그냥 말하지만 당신이 묻는 것을 얻습니다. – Christopher

답변

1

alert(myArray)을 호출해도 데이터의 json 표현이 제공되지 않습니다. alert() 함수는 인수에 toString()을 호출합니다. 그리고 기본 toString() 자바 스크립트 개체의 구현은 단지 "[object Object]" 문자열을 반환합니다.

JSON 표현을 표시하려면 json 직렬화 라이브러리를 사용하여 json 문자열을 생성 할 수 있습니다. This page에서 예를 설명합니다.

+0

많은 감사 Elian. –

0

예상 하시겠습니까?

echo array("1" => 1, "2" => 2);을 PHP로 시도하고 얻은 결과를 확인하십시오.

myArray는 쉽게 출력 할 수있는 문자열이 아니라 javascript 객체입니다. 특정 값을 출력하려면 alert(myArray[0]['id']);

다른 것을 쓰십시오 - 가변 범위. 다양한 클로저에서 사용하려는 경우 myArray를 전역으로 선언해야합니다.

+0

Briedis에게 감사드립니다. 오페라는 완벽하게 작동하고 있습니다. 'alert (myArray [0] [ 'id']);는 의미가 있습니다. 그러나 myArray를 JSON으로 포맷하는 방법이 있습니까? –

+0

내 대답은이 줄을 따라 갔지만 어쩌면 충분히 설명하지 못했을 것이다. 반복은 반복 할 수 있지만 myArray []를 반복하고 한 번 표시 할 모든 내용을 대조한다. – Christopher

+0

@Jeremy, Briedis가 PHP에서 배열을 울리는 것과 그렇게하면 출력은 문자열의 전체 배열이 아닌 'Array' 문자열이됩니다. 자바 스크립트에서도 똑같은 일이 일어나고 있습니다. – mercator

1

JS의 객체 배열을 가지고있는 것처럼 보입니다. JS에서 객체를 반복하고 변수를 읽어야한다고 경고합니다. 경고는 객체의 내용을 표시하지 않기 때문에 배열에 무엇이 표시되는지 물어 보았습니다.이 배열은 객체의 배열입니다.

나는 변수에 배열을 저장하고 배열을 통해 반복 한 다음 각각에 포함 된 배열을 출력합니다. 좀 이런

음 .... :

for(i = 0; i < myArray.length; i++) { 
// access each sub object and collate the info you want to display 
// ie: myArray[i]['id'] 
} 

내가 간단하게 오버 할 수 있습니다,하지만 난 내장 아약스 응용 프로그램과 같은 문제가 기억이이 있는지 메신저 수 나는 그것에 대해 갔다.

+0

@Briedis가 아래/이상 (또는 무엇이든간에)이라고 말한 것과 다소 비슷합니다. – Christopher

+0

크리스토퍼, 대답은 사실 꽤 잘 설명되어 있습니다. 그렇게 말하면, 왜 이것이 작동하지 않는지에 대해 '빛'을 부탁해 줄 수 있겠습니까? (myArray [i] [ 'id'] == deltid) {myArray [i] [ 'title'] = 'delete'; }}' –

+0

잘 보였습니다. 작동하지 않는 것은 어떨까요? 나는 ** deltid **가 올바른 값을 가진 변수라고 가정하고 == "deltid"를 넣지 만 havnt하지만 더 많은 정보가 없으면 도움을 줄 수 없다고 가정합니다 ... 아마도 새로운 질문을 시작하고 여기에 링크로 의견을 말하십시오. 나는 기꺼이 도와 주겠다. ps : 내 대답이 도움이된다면, upvote 또는 accept 중 하나가 최고 일 것입니다;) – Christopher