2

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});
    }
}

上記のコードは、この部分が欠落していることを除いて、カラーボックスにすべて正常に表示されます。json<script type="text/javascript">jQuery(function($){$(".bar").mosaic();});</script>パーサーによって解析されているこの JavaScript をエスケープするにはどうすればよいですか?

編集

問題がjsonパーサーにあることを確認できます。フォーム送信オプションでデータ型をjsonからHTMLに変更したところ、応答で次のエンコードされた文字列が見つかりました();});\u003C/script\u003E

次のコード var data = jQuery.parseJSON(msg); を使用して、データを json に戻します。

script タグがデータから削除されました。パーサーが javascript タグを削除する理由をまだ理解しようとしていますか?

4

1 に答える 1

1

jQuery(function($){...});のショートカットです$(document).ready(function(){...});

つまり、イベントjQuery(function($){$(".bar").mosaic();});時にのみ実行されますready()。カラーボックス内にコードをロードしているため、ready()イベントはすでに発生しており、このスニペットは決してトリガーされません。

最善の策は、JavaScript を個別にホスト$.getScript()し、success()コールバックで a を呼び出すことです。

スクリプト部分自体が欠落している場合は、この方法で JSON オブジェクトを作成できます。

{
    html: "some html",
    js: "some js"
}

そしてeval()JavaScriptコード。(はい、セキュリティに関しては悪いです)

jQuery(function($){})また、あなたは部分を取り除く必要があります

于 2012-12-20T17:43:52.247 に答える