2012-03-10 88 views
0

我使用JSON字符串從PHP在JavaScript中傳遞變量:從PHP傳遞變量給JavaScript

while($row = mysql_fetch_array($result)) 
     { 
       $tmp = array('id'=>$row['id'], 'alert_type_id'=>$row['alert_type_id'], 'deviation'=>$row['deviation'], 'threshold_low'=>$row['threshold_low'], 'threshold_high'=>$row['threshold_high']) ; 
       $settings[] = $tmp ; 
     } 

     echo '{"data":'.json_encode($settings).'}' ; 
在Javascript

,我使用下面的代碼片段:

console.log(result) ;     
var json = eval('('+ result +')') ; 

和出現在控制檯中的是以下錯誤:

1{"data":[{"id":"1","alert_type_id":"1","deviation":null,"threshold_low":"20","threshold_high":"80"}]} 

SyntaxError: Expected token ')' 

請問您能幫我解決這個問題嗎? 非常感謝。

回答

0

那麼這行代碼是無效的。

寫在控制檯:

'(1{"data":[{"id":"1","alert_type_id":"1","deviation":null,"threshold_low":"20","threshold_high":"80"}]})' 

因爲這是你傳遞什麼樣的eval功能。我應該給你同樣的錯誤。

如果你想保存在一個變量字符串,你需要調整它一下:

eval('var x =' + result); 

反正它看起來像你做得不對,請重新檢查你爲什麼需要TI使用「邪惡「eval

+0

是不是像:'('+ result +')'我很抱歉,但我沒有得到什麼錯 – user690182 2012-03-10 20:54:30

+0

@ user690182。不,這不對。它只會在'()'側面運行字符串「command」。你想用'json'做什麼? – gdoron 2012-03-10 20:56:54

+0

謝謝,我寫了你剛剛在PHP中所說的:echo'('。'{「data」:'。json_encode($ settings)。'}'。')';現在一切正常:)謝謝 – user690182 2012-03-10 20:58:06

2

在你的PHP,你可能想使用json_encode編碼您的所有數據:

$result = array(
    'data' => json_encode($settings) 
); 

echo json_encode($result); 

其次,在你的JavaScript,eval很少(永遠)是一個好主意。來自Douglas Crockford的風格指南:

eval函數是JavaScript中濫用最多的功能。躲開它。

相反,你可能想使用JSON.parse()重建服務器返回的結果:

console.log(result) ;     
var resultObj = JSON.parse(result); 
console.log(resultObj); 

如果你的代碼仍然是斷開的,你可能要仔細檢查你的PHP,以確保它不會超出json_encode聲明的任何輸出。

1

東西在你的json字符串前輸出「1」。 Javascript在eval()期間無法正確解析。