我想使用 json 和 jquery 显示图像预览和标题。我的 PHP 脚本对 json 数据进行编码并发送到 jquery 进行预览。数据包含html和javascript。在预览中,我看到了 HTML,但省略了 javascript 标记。我相信 json 解析器会删除这个标签。这是我的代码
PHP 代码
$code = '
<div class="mosaic-block bar">
<div class="mosaic-overlay">
<div class="details">
<h4>Sloppy Art - A Mess of Inspiration</h4>
<p>via the Nonsense Society</p>
</div>
</div>
<div class="mosaic-backdrop"><img src="http://buildinternet.s3.amazonaws.com/projects/mosaic/florian.jpg"/></div>
</div>
<script type="text/javascript">jQuery(function($){$(".bar").mosaic();});</script>';
$json_msg = array('success'=>true, 'msg'=> $code);
echo encode_json($json_msg);
exit;
function encode_json ($mixed_data) {
if(is_array($mixed_data) && isset($mixed_data['msg'])) {
$mixed_data['msg'] = utf8_encode($mixed_data['msg']);
}
return json_encode($mixed_data, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT);
}
Javascript
var form_options = {
success: ShowPreview,
url: url,
type: 'post',
dataType: 'json',
clearForm: false,
resetForm: false,
cache: false,
timeout: 200000,
};
$('.preview-form').ajaxSubmit(form_options);
function ShowPreview(data) {
if(data.success){
$.fn.colorbox({html:data.msg});
}
}
上面的代码在颜色框中显示一切正常,除了这部分丢失了<script type="text/javascript">jQuery(function($){$(".bar").mosaic();});</script>
如何逃避这个被 json 解析器解析的 javascript?
编辑
我可以确认问题出在 json 解析器上。我在表单提交选项中将数据类型从 json 更改为 HTML,然后我发现以下编码字符串响应 E\u003Cscript type=\u0022text/javascript\u0022\u003EjQuery(function($){$(\u0022.bar\u0022).mosaic ();});\u003C/脚本\u003E
我使用以下代码将数据恢复为 json var data = jQuery.parseJSON(msg);
脚本标签已从数据中删除。仍在试图弄清楚为什么解析器会删除 javascript 标记?