2010-08-11 106 views
2

我有幾頁JavaScript使用繁重(例如對數據集進行排序和過濾)。在AJAX調用中返回JSON和HTML

典型的用法是顯示覆雜項目列表(通常呈現爲<li>,其中包含一些HTML):用戶可以刪除,編輯或添加特定表單的項目。由於項目很複雜,我保留一個javascript對象數組來執行任何操作,例如在執行任何操作之前驗證用戶輸入。

用戶的操作和細節通過異步調用發送到服務器:結果到達後,我必須更新HTML和JavaScript數組。

我使用這個hack:服務器將json編碼的數據結構和更新後的HTML作爲單個字符串返回。數據到達時,一些JavaScript代碼將響應分解並將第一個塊解析爲json(更新數組),並將第二個塊放入容器的內部html中,替換之前的內容。

我不想從數據結構中生成HTML,因爲它不是一個人的應用程序,而且網頁設計人員經常(獨立地)更改HTML佈局。 我不想從HTML重新創建數據結構(太複雜且容易出錯)。

這個系統工作得很好,只有大內容有問題,是跨瀏覽器 (建立在jQuery上),似乎沒有很大的性能問題。

問題是:我是否錯過了一些使得這個解決方案不好的微妙的東西(或者是明顯的)? 它是否存在一個更簡單和更好的解決方案?

順便說一下,服務器運行PHP。

謝謝。

+0

這個問題已經過時了:今天我只會使用類似AngularJS的東西 – Iacopo 2014-11-14 17:11:37

回答

6

所以大概你有兩個變量:一個HTML字符串($html_string)和一個PHP數組信息將以JSON格式發送($array_of_info)。然後:

$a = array(
    'html' => $html_string, 
    'json' => $array_of_info 
); 
header('Content-Type: application/json'); 
echo json_encode($a); 

從這裏輸出比其長是從簡單的串聯HTML和JSON字符串,但在客戶端解析應該更容易。而且可能更快。正如評論中指出的那樣,不太容易出錯。

+1

這比簡單地連接HTML和JSON字符串稍長一些,但客戶端的解析應該更容易。而且可能更快。 – TRiG 2010-08-11 10:30:39

+0

而且更少出錯 – Gutzofter 2010-08-11 20:15:52

+0

我應該從頭開始編寫它,我會使用這個解決方案,但是我不覺得有必要改變一個工作解決方案 – Iacopo 2013-01-25 11:05:03

7

爲什麼你不返回HTML字符串作爲JSON的一部分?這樣,你的輸出更清晰。