0

私はajaxクエリを実行してJSONを返していますが、結果の1つはimage.commentegという名前のフィールドです。

test~63~Dave Sanders~http://graph.facebook.com/998433599/picture?type=large~Dave Sanders~9 minutes ago

~セパレーターとして使用しています

データを解析して、使用しているDOMに追加するために、----で区切られた複数の同様のデータセットが存在する可能性があります。image.comment

if(image.comment){

        html += '<div class="msgs_holder'+image.list_id+'">';

        // split comment at ----        
        var comString = image.comment;
        var comArray = comString.split("----");

        var lengthArray = comArray.length,
        element = null;

        for (var i = 0; i < lengthArray; i++) {
            element = comArray[i];

            // split indiv comment at ~     
            var comUserString = element;
            var comUserArray = comUserString.split("~");

            html += '<div class="msgs_row"><div class="msgs_pic"><a href="/'+comUserArray[4]+'"><img src="'+comUserArray[3]+'"></a></div>';
            html += '<div class="msgs_comment"><a href="/'+comUserArray[4]+'" style="text-decoration:none;"><span class="msgs_name">'+comUserArray[2]+'</span></a> '+comUserArray[0]+'<br><span class="msgs_time" title="'+comUserArray[5]+'">'+comUserArray[5]+'</span></div></div>';

        }

        html += '</div>';

    }

しかし、ページの読み込みに失敗し、firefoxfirebugは私に次のように伝えます。allocation size overflow

commentこれは、列にデータがあるJSONの行でのみ発生します

おそらく無限のループがあると思いますが、それを見ることができません

クエリを確認しましたが、正常に実行されるため、

これはjsで爆発するための最良の方法ですか?

何か案は?

詳細情報私がこのようにやっている理由は、それがはるかに大きなクエリの一部だからです。各画像の下にコメントがあるページに読み込まれた画像。だから私は表示のために解析される列にコメントをロードしています。

例:

Image 1        Image 2        Image 3                       etc etc etc
hey                           i think its great!
hey back!                     me too
                              I'm not sure

詳細情報2このデータはMySQLクエリから取得されます。

select w.img_width, w.img_height, w.prod_pic_url as preview3,
        GROUP_CONCAT(ww.comment,'~', h.user_id,'~', h.name,'~', 
        h.live_prof_pic,'~', h.twovo_url,'~', time_ago(ww.dateadded) SEPARATOR '----') AS comment 
        from tableName where blah=blah

GROUP_CONCATは、上記のコメントセクションです。

では、データ内のデータにJSONを使用することは可能ですか?もしそうなら、どのように?

返されたデータの例:

"preview3":"http:\/\/myurl.com\/wish_images\/production\/3578.jpg","comment":"test~63~Dave Sanders~http:\/\/graph.facebook.com\/Dave Sanders\/picture?type=large~Dave Sanders~39 minutes ago"},{"item_id":"3559","numComms":"0","numLikes":"0"... etc etc
4

2 に答える 2

6

これはコメントには適していないので、文字列の代わりにJSONを使用することに関して人々が言っ​​ていると思うことを書いてみます。

これ:

test~63~Dave Sanders~http://graph.facebook.com/998433599/picture?type=large~Dave Sanders~9 minutes ago

これになる可能性があります:

[
    {
        'name': 'test',
        'id': 63,
        'name': 'Dave Sanders',
        'url': 'http://graph.facebook.com/998433599/picture?type=large',
        'when': '9 minutes ago'
        // other properties
    },
    {
        // the next one
    },
    {
        // etc.
    }
]

作業が増えるように見えるかもしれませんが、php用のJSONライブラリを使用して(「爆発」という用語を使用しているので推測しています)、サーバー上にJSONを構築できます。その後、返されたコンテンツは、ブラウザベースのクライアントアプリが追加の作業なしで使用できる形式になっています。最終的に、これが文字列操作でやろうとしていることよりも多くの作業になるとは想像しがたいです。また、JSONは脆弱性が少ない可能性があります。

于 2013-03-18T20:03:39.873 に答える
2

あなたの更新された質問によると...

これには引き続き JSON を使用できます。JSON仕様を読むのに役立つと思います

Chris Farmer の回答に加えて、JSON は配列でも作成できるため、応答でコメントをネストできます。

var response = [
  {
    'name': 'test',
    'id': 63,
    'name: 'Dave Sanders',
    'url': 'http://graph.facebook.com/998433599/picture?type=large',
    'comments' : [
       'comment1',
       'comment2',
       'comment3',
       ...
    ]
  },
  ...
]

次に、次のようにコメントをループできます。

// loop through the images
for ( var i = 0;  i < response.length; i++ ) {

    var image = response[i];

    // loop through the comments
    for ( var z = 0;  z < response.length; z++ ) { 
        var comment = image.comments[z];
        // insert HTML here.
    }
}

これが現在の方法よりもはるかに簡単で冗長ではないことがわかりますか?

残念ながら、長期的にこれを簡単にするには、バックエンド コードを書き直す必要があります。ただし、これにより、JSON を使用して情報を転送することの利点と威力を知ることができます。

于 2013-03-18T20:25:21.803 に答える