使用 json_encode 发送 html 会在末尾返回“null”字符串


Using json_encode to send html returns “null” string at the end

我正在使用它来加载php函数并将它们发送到插件中的javascript,例如:

function me_nav_query_submit() {
    $urlcall = nav_me_paises(); /* fetches a large html string */
    $response = json_encode($urlcall); /* encode to display using jQuery */
    //header( "Content-Type: application/json" );
    echo $response;
    exit;
}

我在页面上插入 html,使用

function(response) {
    jQuery('#navcontainer').html(response);
}

一切正常,除了我在结果的最后得到一个"null"字符串。

json_encode()文档讨论了非 UTF-8 字符上的空字符串,但情况似乎并非如此。我也尝试使用utf8_encode()但没有成功。我已经在SO上阅读了许多其他问题,但是其中大多数都谈论一个返回为null的给定值或错误的UTF-8编码,就我而言,一切都有效,然后将"null"附加到末尾。

注意:建议在 WP Codex 中定义 header() 调用,但我对其进行了注释,因为它给出了"标头已发送"错误。

有什么想法吗?

编辑 这是调用的函数:

function nav_me_paises() {
    ?>
   <ul class="navcategorias">
        <?php $tquery = $_POST['wasClicked']; ?>
        <?php $navligas = get_terms($tquery,'hide_empty=0') ?>
        <?php foreach ($navligas as $liga) : ?>
            <?php $link = get_term_link($liga); ?>
            <li class="liga"><a href="<?php echo $link; ?>" ><?php echo $liga->name; ?></a></li>
        <?php endforeach; ?>
    </ul>
    <?php
}

nav_me_paises() 没有返回任何内容。 HTML 块被视为输出!

function nav_me_paises() {
 $output = '<ul class="navcategorias">';
 $tquery = $_POST['wasClicked'];
 $navligas = get_terms($tquery,'hide_empty=0')
 foreach ($navligas as $liga) {
   $link = get_term_link($liga);
   $output .= '<li class="liga"><a href="'.$link.'" >'.$liga->name.'</a></li>';
  }
  $output .='</ul>';
  return $output;
}
nav_me_paises()

返回任何内容。将这个"无"传递给json_encode()会给"null".转换函数,使其返回 HTML 而不是输出它

function foo()
{
};
var_dump(json_encode(foo()));
string(4) "null"

另外,如果它只是普通的 HTML,为什么要 json 它?只需将其发送到JS,它将是一个存储在变量中的字符串,您可以正常处理它。

我认为您要做的只是将该 HTML 放入某个div 中,因为您不会将其解析为 DOM 并处理其元素......因为如果你这样做,你就不会使用HTML。