2011-08-02 69 views
3

我使用PHP上傳文件,並希望將文件名和文件狀態返回給javascript。在PHP中,我通過以下方式創建json對象:JavaScript中的JSON對象「undefined」錯誤

$value = array('result' => $result, 'fileName' => $_FILES['myfile']['name']); 
print_r ($value); 
$uploadData = json_encode($value); 

這會創建json對象。然後我將它發送到JavaScript中的函數,並將其作爲名爲fileStatus的變量接收。

alert (fileStatus); 

它顯示

{"result":"success","fileName":"cake"} 

這應該是不錯的。但是當我嘗試做

fileStatus.result or fileStatus.fileName 

我得到一個錯誤,說他們是未定義的。請幫助我真的堅持這一點。謝謝。

+4

'fileStatus'可能包含'{ 「結果」 的JSON字符串: 「成功」, 「文件名」: 「蛋糕」}'。 – Gumbo

+2

你可以顯示你設置'fileStatus'的代碼嗎? –

+0

猜你有一些範圍問題,你能顯示實際的代碼嗎? – Prusse

回答

3

fileStatus只是在這一點上一個字符串,所以它並沒有如resultfileName性能。您需要使用諸如Firefox本機JSON.parse或jQuery的jQuery.parseJSON等方法將字符串解析爲JSON對象。

例子:

var fileStatusObj = jQuery.parseJSON(fileStatus); 
+0

非常感謝。這就像一個魅力。 – Falcata

2

如果警報顯示{"result":"success","fileName":"cake"}那麼您可能仍然需要將字符串轉換爲JSON對象。根據您正在開發的瀏覽器,您可以使用native JSON支持或JSON.org實現將您的字符串轉換爲對象。從那裏它應該按預期工作。

+0

或者,您可以使用邪惡的'eval'函數。 –

+0

你可以,但你不應該想。 :) – Dan

1

當你設置變量,不要把周圍的引號。只是這樣設置變量:

var fileStatus = <?php echo $uploadData; ?>; 

或:

var fileStatus = <?=$uploadData?>; 

不要做到這一點:

var fileStatus = '<?php echo $uploadData; ?>';