我想你錯過了一個非常有效的選擇,我經常使用這個選項。這是我的典型模式,它有沒有讓我失望... :-)
這裏是基本的jQuery的模板,我使用:
$(function() {
$.getJSON('/some/page',{foo:bar,bar:foo},function(json) {
if(json.outcome == 'success') {
$('body').prepend(json.html);
} else {
// Somehow let the user know why it didn't work
alert(json.error);
}
});
});
這裏是基本的後端(PHP在我的情況)結構我用:
<?php // Page: '/some/page'
/* Blah Blah Blah... do whatever needs to be done... */
// If everything turns out okay (assuming '$output' is the HTML
// you want to display...
echo json_encode(array('outcome'=>'success','html'=>$output));
// If something goes wrong... just do:
echo json_encode(array('outcome'=>'error','error'=>'Uh oh... something is broken'));
當然,你可能希望通過將它們放入一些變量或其他東西來更具體地處理你的錯誤。但是,你應該明白這個主意。另外,當然你可以添加更多的信息到JSON輸出。你可以有一些預先製作的HTML,還有一些其他的信息,例如某個元素的「成功通知」或新的類名,我不知道......無論如何......可能性是無止境的。
不管怎麼說,我選擇這條路線的原因是因爲它往往更快(根據我的經驗)將預製HTML添加到DOM,而不是循環播放JSON和插入東西,除非它只是一點點文字替換成一個元素。但是,我所展示的方法是IMO,兩全其美。您可以將HTML作爲字符串附加到其中一個JSON屬性。
Happy jQuerying :-)
這遠不是'最好的',因爲混合了數據和表示。很多更清潔的是在HTML中使用模板,並使用數據填充它們 – Javier 2009-05-20 20:28:50
咦?沒有什麼是混合的,它通過我的方法通過MVC乾淨地分離服務器端。 – RedFilter 2009-05-20 20:42:46