我想使用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);
}
Java脚本
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});
}
}
上面的代码在colorbox中显示一切正常,除了缺少这部分
<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 / script \ u003E
我使用以下代码将数据还原为json
var data = jQuery.parseJSON(msg);
脚本标签已从数据中删除。仍在尝试找出解析器为何删除javascript标记的原因?
最佳答案
jQuery(function($){...});
是$(document).ready(function(){...});
的快捷方式
这意味着jQuery(function($){$(".bar").mosaic();});
仅在ready()
事件时执行。由于您是在颜色框内加载代码,因此ready()
事件已被触发,此代码段将永远不会触发。
最好的选择是分别托管您的JavaScript并在$.getScript()
回调上调用success()
如果缺少脚本部分本身,则可以通过这种方式创建JSON对象,
{
html: "some html",
js: "some js"
}
然后
eval()
javascript代码。 (是的,它的安全性很差)另外,您还必须摆脱
jQuery(function($){})
部分