【问题标题】:Using json_encode to send html returns “null” string at the end使用 json_encode 发送 html 最后返回“null”字符串
【发布时间】:2012-04-08 15:03:58
【问题描述】:

我正在使用它来加载 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);
}

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

json_encode() 文档讨论了非 utf-8 字符上的空字符串,但情况似乎并非如此。我也尝试过使用utf8_encode(),但没有成功。我在这里阅读了很多关于 SO 的其他问题,但其中大多数要么谈论一个给定的值以 null 或错误的 UTF-8 编码返回,在我的情况下一切正常,然后将“null”附加到末尾。

注意:建议在 WP Codex 中定义 header() 调用,但我评论它是因为它给出了“标头已发送”错误。

有什么想法吗?

EDIT这是调用的函数:

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() 并且对于标题,它应该在任何输出之前
  • 已编辑以包含功能:)
  • 请不要误会,但是阅读你的代码真的是一种折磨。
  • 感谢您的提醒。不过,我真的很想做得更好。

标签: php jquery ajax json wordpress


【解决方案1】:

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;
}

【讨论】:

  • 那有多尴尬,嗯?谢谢:)
【解决方案2】:

nav_me_paises() 不返回任何内容。将此“无”传递给json_encode() 会得到"null"。转换函数,使其返回 HTML 而不是输出它

function foo()
{
};

var_dump(json_encode(foo()));
string(4) "null"

【讨论】:

    【解决方案3】:

    另外,如果它只是纯 HTML,为什么是 json 呢?发给JS就行了,就是一个字符串存储在一个变量中,你就正常处理了。

    我想你想做的只是把 HTML 放在某个 div 中,因为你不会将它解析成 DOM 并处理它的元素……因为如果你这样做,你就不会使用 HTML。

    【讨论】:

      猜你喜欢
      • 2016-12-08
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      相关资源
      最近更新 更多