2013-03-18 136 views
0

我正在運行ajax查詢並返回JSON,其中一個結果是名爲image.comment的字段,例如,Javascript爆炸問題

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

我使用~作爲隔板

有可能是通過在所以image.comment分離的數據解析的數據,並把它添加到DOM我使用的多個類似組:

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>'; 

    } 

但頁面加載失敗和Firefox螢火告訴我:allocation size overflow

這只是發生在RO哪裏有數據comment列JSON的WS

我懷疑有些也許是無限循環,但不能看到它

我檢查了查詢,並運行良好,從而不是

這是在js中爆炸的最佳方式是什麼?

任何想法?

更多信息我這樣做的原因是它是一個更大的查詢。圖片加載到每張圖片下的評論頁面。因此,我將註釋加載到要解析顯示的列中。

實施例:

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

MORE INFO 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 
+9

爲什麼不實際返回JSON而不是String? – Jivings 2013-03-18 19:49:22

+0

因爲它嵌套在一個更大的查詢中 - 想象下面帶有註釋的圖像,因此1到很多,註釋都在鏈接到每個圖像的字符串中 – 2013-03-18 19:52:23

+2

那麼?爲什麼這很重要?它會簡化你的世界在JavaScript方面,並且在服務器端如果你使用JSON去更不那麼呆板。而且,您也不必處理「Dave Sanders」決定自稱「Dave〜Sanders」的煩人案例。 – 2013-03-18 19:53:49

回答

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. 
    } 
] 

它可能看起來像更多的工作,但你可以使用一些JSON庫的PHP(我猜,因爲你使用術語「爆炸」)在服務器上建立JSON。然後,您返回的內容已經以您的基於瀏覽器的客戶端應用程序的形式使用,無需額外工作。我發現很難想象這最終會比你想用字符串操作做更多的工作,並且JSON可能不那麼脆弱。

+0

更新的問題,謝謝 – 2013-03-18 20:13:51

2

根據您更新的問題...

您仍然可以爲此使用JSON。我認爲它可以幫助你閱讀JSON specification

添加到克里斯農民的回答,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傳輸信息的好處和威力。

+0

好吧,將再次更新問題,你錯過了我在更新中提到的爆炸級別,這個數據也包含在一個MySQL查詢中,再次更新 - 如果我失蹤這裏我想知道的東西,因爲我沒有得到你說關於將結果的一部分轉換爲JSON的說法 – 2013-03-18 20:51:21

+1

@DarrenSweeney也許提供創建需要爆炸的字符串的後端代碼會很有幫助。 – Jivings 2013-03-18 20:58:29

+0

請看更新的問題,我感謝你的時間,讓我瘋狂! – 2013-03-18 21:04:40