0

Jquery の .getJSON 関数の JSON データを取得しています。データを安全にするために .text を使用することを考えています (これは適切なことだと思います)。テストしましたが、JSON は正しいです。

これが私が取り組んでいるスクリプトです:

var firstpost = 0;
var firstrun = 0;
var lastpost = 0;

^ グローバル変数

        $.getJSON('chatget.php', {
    'chatroomid' : '<?php echo $chatroomid; ?>',
    'firstpost': firstpost,
    'lastpost': '1'},
    function(data) {
        var template = '<div id="_ID_" class="chatpost"> <div><b>_NAME_ </b> <a href="_URL_"> _USERNAME_ </a> _DATETIME_</div> <div><em>_TARGETS_</em></div> <div>_TEXT_</div> </div>';
        var appendhtml ='';

        var datarows = data['New'].length;
        lastpost = data['New'][datarows]['CPid'];

        // Each row processor               
        $.each(data['New'], function(index, col){

        // Get initial data
        if (firstrun == 0){
        firstpost = col.CPid;
        firstrun = 1;}

            // process targets
            if(col.Targets !== null){
                var target = col.Targets.split(',');
                var trow = target.length;
                var targets = '';
                for (var i=0, len=target.length; i<len; i++){

                    targets = targets + '@' + target[i] + ' ';}     
            }else {var targets = '';};

            // Append data to chatroom
            var cpid = $.text(col.CPid);
            var name = $.text(col.Name);
            var username = $.text(col.Username);
            var url = $.text(col.Url);
            var text = $.text(col.Text);
            var datetime = $.text(col.Datetime);
            var targets = $.text(targets);

            appendhtml = template.replace('_ID_',cpid).replace('_NAME_',name).replace('_USERNAME_',username).replace('_URL_',url).replace('_TEXT_',text).replace('_DATETIME_',date).replace('_TARGETS_', targets);

        $('#chatroom').append(appendhtml);
        });






        } // End Data function
    ) // End Get Json

何らかの理由で、このコードの一部を変更したため、firebug がクラッシュしているため、firebug でバグを見つけたか、コーディングで非常に間違ったことをしました。$.text を正しく使用しているとは思いません...

また、data['New'] オブジェクト/配列の最後の値を取得しようとしています。.length が機能していないようです。

            var datarows = data['New'].length;
        lastpost = data['New'][datarows]['CPid'];

これは私の最初の javascript/Jquery プログラムなので、コードに問題がある場合は教えてください。

4

1 に答える 1

1

ベストプラクティスとして、anonymousラッパー関数内にコードをカプセル化して、作成/使用した関数や変数が外部環境からアクセスできないようにします。

(function(){
    //your code
}())

注:Google、jqueryなどはすべて、この実践システムに従います。

于 2013-03-19T04:38:45.153 に答える