我有一个返回JSON对象的PHP页面,如下所示:
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= "" >"
this is some text"
blah blah, "
some more `text"
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 :(得分:1)
将您的内容放入PHP数组中。然后使用json_encode()
将其转换为JSON
这将安全地编码和转义字符,例如HTML属性中的双引号。
<强>更新强>
j.length
不起作用的原因是:
带键的PHP数组不是Javascript数组。 Javascript数组没有键。因此,转换后,PHP数组将转换为JS对象。
要访问JS对象,您可以使用j.content
,而不是使用j.length
循环访问对象。 j.length
未定义,因为对象j
中没有属性名为length
的属性(因为在PHP数组中没有$arr['length']
)