Php Smarty fetch vs Smarty display

Php Smarty fetch vs Smarty display,php,smarty,Php,Smarty,我必须在主模板中显示一个小模板,这样小模板就可以基于ajax响应来显示。我已经到了在ajax请求后获取参数的阶段 $smarty=new Smarty(); if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { // echo "<pre>"; //print_r("Yes");

我必须在主模板中显示一个小模板,这样小模板就可以基于ajax响应来显示。我已经到了在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'); 
}
$smarty=new smarty();
如果(isset($\u服务器['HTTP\u X\u请求的\u带有']))
&&$\u服务器['HTTP\u X\u请求的\u与']='XMLHttpRequest')
{
//回声“;
//打印(是);
//回声“;
echo$smarty->fetch('../templates/small page.tpl');
}否则{
$smarty->display('../templates/index page.tpl');
}

这里echo语句不起作用。当我取消对print\r函数的注释时,我可以在firebug中看到html包含“Yes”,但它没有显示在页面上。非常感谢您的帮助。

我认为Smarty与您的问题无关。Smarty输出其编译模板的处理结果

想象一下“是”出来了

在客户端,您有

xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
        alert(xmlhttp.responseText);
     } 
}
responseText将保留“是”。例如,尝试:

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

如果这样做有效,您必须决定要对文本执行什么操作。

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

尝试:

然后在客户端


告诉我它是否有效

客户端的代码是什么?您是否使用ajax调用的结果在页面上显示它?看起来你在做一个没有利用结果的get。smarty代码似乎正确。@jerome这是js代码。我不确定如何在客户端将智能模板显示为responsexml。xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState==4&&xmlhttp.status==200){//不确定如何根据responseText或responseXMl}的结果显示smarty模板。我尝试了一个警报(xmlhttp.responseText),我返回一个xml输出,因此我可以看到返回的xml,但在html页面中。例如,我在其中有完整的xml,因此我无法使用dom元素遍历,因为它给我的消息是responseXML为空。如果我将其作为html传递,则再次获得完整的页面。从这里开始有什么方向吗?@Jerome.Awesome谢谢你u,非常感谢您的帮助。最后,我们是否必须在发送请求或响应时设置mime类型?通常您不必为mime类型操心。在您的特定情况下,如果未设置mime类型,浏览器将不会尝试填充responseXML。如果现在对您有效,您能否“接受”答案?Thx。
header("content-type: text/xml");
echo $smarty->fetch('../templates/small-page.tpl');
alert(xmlhttp.responseXML);