2012-10-16 133 views
0

我有一個jQuery Ajax調用我的服務器,以基於某些用戶活動與我的網站爲我的頁面上的部分檢索一些HTML。除了從服務器提供的一些JSON數據呈現的HTML之外,我還發現我需要。回到客戶端呈現HTML和JSON數據的最佳方式是什麼?我在想有3種不同的選擇:jquery ajax返回數據和html

  1. 第二次調用服務器的JSON數據。這涉及第二次往返。我可以串多個AJAX調用使用:

    $時(call_1,call_2).done(函數(results_1,results_2){...}))

  2. 包括在呈現的HTML這是一個腳本塊調用一次呈現的HTML被添加到DOM:

    ... rendered html output ... 
    $(document).ready(function() 
    { 
        alert('data here'); 
    }); 
    
  3. 莫名其妙地嵌入HTML渲染成JSON從調用返回再有JS調用函數從JSON分開呈現的HTML並相應地更新DOM。這個選項只是味道不好。

我傾向於選項1,即使它是一個額外的服務器命中,因爲它似乎是一個更好的方法。你認爲哪種方法更好?有沒有想過的另一種方式?

謝謝

回答

1

首先,編碼服務器端的HTML ..是這樣的:

function HTMLEscape(str) { //Javascript code, adjust as per your server-side lang 
    return String(str) 
     .replace(/&/g, '&') 
     .replace(/"/g, '"') 
     .replace(/'/g, ''') 
     .replace(/</g, '&lt;') 
     .replace(/>/g, '&gt;'); 
} 

現在,據說你在收到客戶端以下JSON響應:

data = { 
    html: "&lt;div&gt;Text goes here&lt;/div&gt;&lt;script type=&#39;text/javascript&#39;&gt;alert(&#39;text goes here too&#39;)&lt;/script&gt;", 
    status: 1, 
    some: 'stuff' 
}; 

在阿賈克斯完成,開始拆箱JSON:

ResultJSON = data; 

$("div#destination").html(HTMLUnescape(ResultJSON.html)); 
$("input#status").val(ResultJSON.status) 

最後,在你的.js文件的某處隱藏這個JavaScript函數:

function HTMLUnescape(str) { 
    return String(str) 
     .replace(/&amp;/g, '&') 
     .replace(/&quot;/g, '"') 
     .replace(/&#39;/g, "'") 
     .replace(/&lt;/g, '<') 
     .replace(/&gt;/g, '>'); 
} 

希望它能幫助。 ( - :

0

選項1更好。你也可以這樣想,

讓json字典發送到html包含所有的數據和html內容。事情是這樣的,

{ 
'html':"<div>this is new html</div>", 
'var1':'var1 value', 
'var2':'var2 value' 
} 
+0

感謝您的反饋意見,我想到了您描述的內容。我的呈現的HTML可能相當大,我擔心呈現的html中的某個有趣的字符可能會導致JSON失效。 –