我想你错过了一个非常有效的选择,我经常使用这个选项。这是我的典型模式,它有没有让我失望... :-)
这里是基本的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