【问题标题】:Get Smarty-formatted data from PHP script从 PHP 脚本获取 Smarty 格式的数据
【发布时间】:2016-12-14 16:01:35
【问题描述】:

我通过 XMLHttpRequest 调用的 PHP 脚本执行查询并检查条件,然后输出带有一些 Smarty 代码的 HTML sn-p。当我尝试通过调用jQuery.html() 函数或设置innerHTML 属性将该代码插入<div> 标记时,Smarty 代码按原样打印,因此不会被解释为Smarty 代码。我该如何解决这个问题?

相关代码:

PHP 脚本:

<?php
        $mysqli = new mysqli("localhost", "<<<SQL USERNAME>>>", "<<<SQL PASSWORD>>>", "<<<SQL DATABASE>>>");
        $id = $_GET["idmf"];
        $cat = $mysqli->query("<<<SQL QUERY>>>")->fetch_assoc()["category"];
        if ($cat == $_GET["cat"])
            echo 'blahblah';
?>

TPL 文件:

{foreach from=$manufacturers item=manufacturer name=manufacturers}
    <div id="mffilter_{$manufacturer.id_manufacturer}"></div>
    <script>

        var xhttpf;
        if (window.XMLHttpRequest)
        {
            xhttpf = new XMLHttpRequest();
        }
        else
        {
            // code for IE6, IE5
            xhttpf = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xhttpf.onreadystatechange = function()
        {
            if (this.readyState == 4 && this.status == 200)
            {
                document.getElementById("mffilter_{$manufacturer.id_manufacturer}").innerHTML = this.responseText;
            }
        };
        xhttpf.open("GET", "<<<ENDPOINT>>>.php?cat=food&idmf={$manufacturer.id_manufacturer}", true);
        xhttpf.send();

    </script>

【问题讨论】:

  • Smarty 不是这样工作的。在回显之前,您需要在 php 脚本中使用 smarty 解析所需的 html。此外,如果您使用 Prestashop,请使用其控制器及其 db 访问方法进行 ajax 调用。
  • @TheDrot 你能以某种方式称呼我吗?

标签: javascript php xmlhttprequest smarty prestashop


【解决方案1】:

尝试用以下代码替换您的 TPL 文件代码:

{foreach from=$manufacturers item=manufacturer name=manufacturers}
    <div id="mffilter_"{$manufacturer.id_manufacturer}></div>
    <script>

        var xhttpf;
        if (window.XMLHttpRequest)
        {
            xhttpf = new XMLHttpRequest();
        }
        else
        {
            // code for IE6, IE5
            xhttpf = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xhttpf.onreadystatechange = function()
        {
            if (this.readyState == 4 && this.status == 200)
            {
                document.getElementById("mffilter_"{$manufacturer.id_manufacturer}).innerHTML = this.responseText;
            }
        };
        xhttpf.open("GET", "<<<ENDPOINT>>>.php?cat=food&idmf="{$manufacturer.id_manufacturer}, true);
        xhttpf.send();

    </script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2016-01-18
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    相关资源
    最近更新 更多