2014-01-11 62 views
0

我想將php數組轉換爲json字符串,並通過異步Web請求傳遞該字符串。當webrequest被創建時...我傳遞的字符串的值是「[object object]」,我不想要。難以將php關聯數組轉換爲字符串

稍作簡化:

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

在JavaScript後...

<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); 

我想這是有道理的...警報(numberOfPlayers)不會被綁定,直到運行時間所以我們不會看到值:{「QB」:0,「RB」:0}然而

但是當我真的運行它時,我的彈出警報是[Object object]而不是字符串json string I希望爲:{ 「QB」:0, 「RB」:0}

整個問題是,當我把我的查詢,它發送./queries/queryForAvailablePlayers.php?playerId=179 &用戶id = 2 & numberOfPlayers = [對象對象]。這個查詢是這樣捕獲的,我不能使用json_decode($ _ GET ['numberOfPlayers'],true)將其返回到關聯數組中以提取值並最終用於查詢我的數據庫。

任何與此事有關的幫助表示讚賞!謝謝

回答

3

如果你希望它是字符串,而不是JS對象,你需要在JS添加引號:

相反的:

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

做到這一點:

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

編輯(額外)

此外,它總是建議截至逃避你的網址參數,所以

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

最好是:

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

乾杯

+0

我想我感到困惑。我認爲json_encode函數產生了一個字符串:「返回一個包含值的JSON表示的字符串。」資料來源:http://www.php.net/json_encode。我會在短短的時間內嘗試你所說的話。但我的希望是,我可以作爲字符串傳遞,並使用json_decode將jason格式的字符串轉換回關聯數組,以便我可以在其中抽取值,例如RB – donsiuch

+2

@don是,它會生成一個字符串。但是如果你把這個字符串放到源代碼中,它會被解釋爲代碼,你應該能夠看到在生成的代碼中它根本不是字符串。 – deceze

+1

@donsiuch確切地說,我正要說相同的 –

0

你輸出到Javascript的是一個Javascript對象字面量(這就是JSON本質上),所以Javascript變量將保存一個對象,而不是一個字符串。因爲這樣的警報是完全正確的,變量持有一個對象。嘗試使用console.log而不是alert以在瀏覽器的控制檯中獲得更完整的調試值。

我發現這是比運輸字符串更好的選擇,因爲您可以直接在Javascript中使用本機Javascript對象。你只需要注意正確地格式化對象以便在URL中使用,而不是僅僅連接它,同樣的,你必須對待Javascript中的任何對象變量。