2014-01-11 2 views
0

PHP 배열을 json 문자열로 변환하고 비동기 웹 요청을 통해 해당 문자열을 전달하고 싶습니다. webrequest가 만들어지면 ... 내가 통과 한 문자열에는 "[Object object]"값이 있습니다. 나는 원하지 않습니다.PHP 연관 배열을 문자열로 변환하는 데 문제가 있습니다.

은 약간 단순화 :

: 나는 마우스 오른쪽 버튼을 클릭하고 뷰 소스 코드를 내가 볼 때 나중에 자바 스크립트에서

$positionCounterArray = array("QB"=>1, "RB"=>1); 
$positionCounterArrayString = json_encode($positionCounterArray); 

...

<script> 

var numberOfPlayers = <?php echo $positionCounterArrayString; ?>; 
alert(numberOfPlayers); 
var query = "./queries/queryForAvailablePlayers.php?playerId="+playerId+"&userId="+id+"&numberOfPlayers="+numberOfPlayers; 

</script> 

가 직접 위의 코드의 섹션에 해당하는

var numberOfPlayers = {"QB":0,"RB":0}; 
alert(numberOfPlayers); 

나는이 말이 맞는다고 생각합니다 ... alert (numberOfPlayers)는 런타임까지 바인딩되지 않습니다. 그래서 우리는 값을 볼 수 없습니다 : { "QB": 0, "RB": 0} 아직

그러나 실제로 실행하면 내 팝업 경고는 문자열 json 문자열 대신 [Object object]입니다. 기대했다 : { "QB": 0, "RB는"0} 내 쿼리를 보낼 때, 그것은 ./queries/queryForAvailablePlayers.php?playerId=179 & userId를 = 2 &를 전송

전체 문제가 있음 numberOfPlayers = [개체 개체]. 이 쿼리는 이와 같이 잡히고 json_decode ($ _ GET [ 'numberOfPlayers'], true)를 사용하여 연관 배열로 값을 추출하고 결국 내 DB에 대해 쿼리하는 데 사용할 수 없습니다.

이 문제에 대한 도움을 주시면 감사하겠습니다. 감사합니다

답변

3

, 당신은 JS에 따옴표를 추가 할 필요가 대신의

:

var numberOfPlayers = <?php echo $positionCounterArrayString; ?>; 

을 이렇게 :

var numberOfPlayers = '<?php echo $positionCounterArrayString; ?>'; //See the quotes 

수정 (추가)

또한 항상 좋습니다

var query = ... +id+"&numberOfPlayers="+encodeURIComponent(numberOfPlayers); 

건배

+0

내가 혼란 점점 오전 같아요

var query = ... +id+"&numberOfPlayers="+numberOfPlayers; 

더해야한다, 그래서 당신의 URL PARAMS을 탈출했다.json_encode 함수가 문자열을 생성했다고 생각했습니다. "값의 JSON 표현을 포함하는 문자열을 반환합니다." 출처 : http://www.php.net/json_encode. 나는 당신이 잠시 후에 말하는 것을 시도 할 것입니다. 하지만 내 희망은 내가 문자열로 전달할 수있는 json_decode jason 형식으로 해당 문자열을 다시 연관 배열로 바꿀 수 있도록 거기에 값을 뽑을 수 있습니다. RB – donsiuch

+2

@don 예, 문자열을 생성합니다. 그러나이 문자열을 소스 코드에 넣으면 코드로 해석되어 생성 된 코드에서 문자열이 아님을 알 수 있어야합니다. – deceze

+1

@donsiuch 정확하게 deceze가 말했듯이, 나는 똑같이 말하려고 했었습니다. –

0

Javascript로 출력되는 내용은 Javascript 객체 리터럴 (이는 JSON이 본질적입니다)이므로 Javascript 변수는 문자열이 아닌 객체를 보유하게됩니다. 그러한 경고는 완벽하게 정확하므로 변수는 객체를 보유합니다. 브라우저의 콘솔에서보다 완전한 디버그 값을 얻으려면 alert 대신 console.log을 시도하십시오.

자바 스크립트에서 기본 자바 스크립트 개체로 직접 작업을 수행 할 수 있으므로 문자열을 전송하는 것과는 대조적으로이 방법이 더 좋습니다. URL을 연결하는 대신 URL에서 사용하도록 개체의 형식을 올바르게 지정해야합니다. Javascript에있는 개체 변수를 처리해야합니다. 당신이 그것을 대신 JS 객체의 문자열하려면

관련 문제