Smarty fetch vs smarty display

时间:2010-12-16 18:01:00

标签: php smarty

我必须在主模板中显示一个小模板,以便根据ajax reposne显示小模板。我已经到了ajax请求后获取参数的阶段。

$smarty=new Smarty(); 
if(isset($_SERVER['HTTP_X_REQUESTED_WITH'])
    &&$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
{
    // echo  "<pre>";
     //print_r("Yes");
     //echo "</pre>";
     echo $smarty->fetch('../templates/small-page.tpl');
} else {
     $smarty->display('../templates/index-page.tpl'); 
}

这里的echo语句不起作用。当我取消注释print_r函数时,我可以在firebug中看到html包含“是”但它没有显示在页面上。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

我认为Smarty不会参与你的问题。 Smarty输出任何来自其编译模板处理的内容。

想象一下“是”出来了。

在客户端,你有

xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
        //Not sure how to diplay a smarty template as a result of responseText or responseXMl 
     } 
}

responseText将保持“是”。例如,尝试:

xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
        alert(xmlhttp.responseText);
     } 
}

如果这样做,您将必须决定要对文本做什么。

答案 1 :(得分:1)

如果smarty模板的输出是XML格式,则可以使用xmlhttp的responseXML属性,但前提是php输出正确的mime类型。

尝试:

header("content-type: text/xml");
echo $smarty->fetch('../templates/small-page.tpl');

然后在客户端,

alert(xmlhttp.responseXML);

告诉我它是否有效!