2009-09-13 35 views
1

我有一個是返回一個JSON對象這樣的PHP頁面:JSON搞亂數據返回時有HTML標籤

header('Content-Type:application/json'); 
    echo <<<HERE_DOC 
     [ {content: '{row2[contentFull]}', bigimages: '{$row3['catalogFileID']}'}] 
     HERE_DOC; 

在我的主網頁,我有以下的jQuery代碼:

jQuery(function() 
{ 
    jQuery("select#rooms").change(function() 
    { 
    var options = ''; 

    jQuery.getJSON("/admin/selection_about.php",{id:jQuery(this).val(), 
        ajax:isAjax}, function(j) 
    { 
     for (var i = 0; i < j.length; i++) 
     { 
      options = j[i].topImage; 
      document.getElementById('content1').value = j[i].bigimages; 
     } 
    }) 
    }) 
}) 

所以基本上在我的主頁中,我有一個下拉菜單。當選擇一個選項時,它會將一個Ajax請求發回服務器。我以JSON格式獲取數據,然後基於該JSON對象更新ID爲'content1'的textarea。

JSON對象看起來是這樣的:

[ 
    { 
    content: '<SPAN STYLE= "" >&quot; 
    this is some text&quot; 
    blah blah, &quot; 
    some more `text&quot; 
    now some linebreaks; 
    <BR><BR>some more text and then another` linebreak.`<BR>`</SPAN>', 
    bigimages: 'cfil1069' 
    } 
]` 

但也有在這裏發生的錯誤和我的textarea沒有更新。但是,如果我硬編碼簡單的文本在JSON對象中返回,那麼我的textarea被更新。

是否存在JSON對象中的數據不應具有HTML標記的條件?

編輯:

至於建議,我改變了我的代碼在PHP代碼如下:

$arr = array ('content'=>$rest1,'bigimages'=>$row3['catalogFileID']); 
echo json_encode($arr); 

但是現在在我的jQuery代碼:

j的

長度 '未定義' .. 。

jQuery.getJSON("/admin/selection_about.php",{id: jQuery(this).val(), 
        ajax: isAjax}, function(j) 
    { 
     alert('here3: ' + j.length); // this shows undefined 

     for (var i = 0; i < j.length; i++) 
     { 
      document.getElementById('content1').value = j[i].content; 
     } 
    }) 
+0

直接關係到http://stackoverflow.com/questions/1414213/html -tags-in-data-returned-from-json – VolkerK 2009-09-13 02:19:59

+0

也直接關係到http://stackoverflow.com/questions/1414205/cant-get-response-from-ajax-with-jquery – 2009-09-13 02:22:32

+0

@David Andres:是的,但是, 1414213已被同一用戶詢問(雖然尚未提供答案)。 – VolkerK 2009-09-13 02:24:23

回答

1

將您的內容放入PHP數組中。然後使用json_encode()將其轉換爲JSON。
這將安全地編碼和轉義字符,例如HTML屬性中的雙引號。

UPDATE:

爲什麼j.length不工作的原因是:
一個PHP陣列鍵不是JavaScript數組。 Javascript數組沒有密鑰。因此,轉換時,PHP數組被轉換爲JS對象。

改爲訪問您的JS對象,您可以使用j.content,而不是通過與j.length對象循環。 j.length是不確定的,因爲在對象j沒有屬性與屬性名length(那是因爲你的PHP數組,沒有$arr['length']

+0

這樣做會使我的代碼中斷。在回顯json_encode()之前,我正在以j.content的形式訪問json對象的元素,但現在代碼已經崩潰。應該以其他方式訪問嗎?因爲我注意到,從json返回的數據現在是「內容」:「東西」...而不是內容:「東西」 – josh 2009-09-13 02:40:55

+0

它不會破壞代碼,如果它被寫入「內容」:「東西」,在JavaScript中它是仍然有效。 – mauris 2009-09-13 03:06:20