2011-12-13 21 views
0

我有一個PHP文件,使用xmlhttp將字符串發送到js文件。 js文件應該將字符串轉換爲一個對象,並開始在這個對象上做他的事情。試圖將字符串轉換爲對象使用Javascript,但在ie8中獲取語法錯誤

好了,PHP文件打印字符串:

$obj="{status:'ok',data:'{link:\"".$link."\",c:\"".$c."\",p:\"".$p."\"}'}"; 
echo $obj; 

和js文件應該得到這樣的:

{status:'ok',data:'{link:"http://test.com/test.html",c:"9",p:"1"}'} 

雖然我想這個字符串轉換從JS文件字符串到一個對象,我得到ie8語法錯誤(在Firefox和Chrome中工作正常)。

這裏是我如何做到這一點的JS文件:

eval("var response=" + xmlhttp.responseText); 

我試圖手動將字符串中的js文件和EVAL工作,所以我認爲這個問題是與撇號和引號由php文件發佈。

您認爲如何?有沒有人知道這種問題的解決方案?

在此先感謝!

+1

你檢查了什麼表達式「var response =」+ xmlhttp.responseText實際上評估到了什麼? –

+0

Hi Roy,這是我打印時得到的結果: 'var response = {status:'ok',data:'{link:「http://test.com/test.html」,c:「9 「,p:」1「}'}'' –

+1

爲什麼不使用PHP的[JSON庫](http://php.net/manual/en/book.json.php)來創建一個標準的JSON字符串和那麼在JavaScript中使用JSON庫來加載客戶端上的對象,而不是使用'eval'? –

回答

2

爲了詳細闡述我上面的評論,PHP和JavaScript都使得對JSON進行編碼和解碼變得非常容易。你的PHP是這樣的,沒有醜陋的字符串連接一個乾淨的嵌套數組:

<?php 
$obj = array(
    'status' => 'ok', 
    'data' => array(
    'link' => $link, 
    'c' => $c, 
    'p' => $p 
) 
); 
?> 

...而JavaScript是這樣的,沒有醜女eval

<script> 
    var response = JSON.parse(xmlhttp.responseText); 
</script> 

倘若你如果您使用的是未經JSON支持編譯的PHP副本,並且無法自行更新PHP,則可以使用許多PHP開發源代碼JSON庫,其中包含的功能相同,其中包括來自PEAR的Services_JSON

如果您被困在內置支持瀏覽器而不支持JSON的情況下,只需在json2.js即可。

+0

嗨喬丹, 我嘗試使用json.parse()從json2 .js文件。 它更乾淨,但問題仍然存在... 我一直在ie8中出現語法錯誤 - 這次它指向json2.js文件,第472行。您猜對了 - 在第472行json2.js使用eval。 .. 所以我回到了開始......任何其他想法? 再次感謝! –

+0

嗨, 我真的對不起這個麻煩 - 我發現我的一個php沒有正確發送JSON字符串!它現在在兩種方式工作 - eval和json2.js 非常感謝您的善意幫助! :) –

0

我發現我的一個php沒有正確發送JSON字符串!它現在正以兩種方式工作 - eval和json2.js非常感謝您的熱心幫助! :)

相關問題