为什么我的AJAX调用返回< \ / button>代替 ?

时间:2014-10-21 06:29:43

标签: ajax json

我的AJAX电话是

function xml_getsitepage($idsite){
    $.ajax({
        url: 'public/xml/xml_getsitehtml.php',
        dataType: 'JSON',
        data: {
            "id":$idsite
        },
        type: 'POST',
        success: function (response) {
            $("#nav").html(response.nav);
        }
    });
    return;
}

'public / xml / xml_getsitehtml.php'的最后几行是

      $arr['htmlnav']=$htmlnav;
      $arr['htmlcontain']=$htmlcontain;
      $arr['isOK']="Is OK";
   }else{
      $arr['htmlnav']='Failed1';
      $arr['htmlcontain']='Failed1';
   }
}else{
   $arr['htmlnav']='Failed2';
   $arr['htmlcontain']='Failed2';
}
echo json_encode($arr);
exit;

萤火虫响应标签显示全部为“< / button>” JSON选项卡正确显示的位置

我在网上搜索但找不到任何帮助我的东西。

我无法在浏览器中“看到”数据并且#nav仍为空白,但如果我手动将html与\去除,则显示确定。

2 个答案:

答案 0 :(得分:1)

默认情况下,PHP json_encode将在字符串中转义/个字符。

此:

  • 不会更改数据。 "\/""/"/个字符的两个不同但有效且相等的JSON表示。
  • 允许您将输出用作JavaScript文字,在HTML文档中内联,而不是</script>在字符串中间结束脚本元素。

无论你遇到什么问题,它都与逃脱的斜杠无关。

如果是,那么您生成的HTML中会包含一些无效的结束标记,这些标记将被忽略或视为文本。因此,您可以在按钮中获得更多文本内容。


你的问题就是这个不匹配:

$arr['htmlnav']=$htmlnav;
response.nav

您正在写信htmlnav但是正在尝试阅读nav

答案 1 :(得分:0)

正在逃避斜线。在前端收到字符串后,只需将字符串取消即可。

或者,如果您感到懒惰,可以在PHP脚本中禁用转义功能:

echo json_encode($arr, JSON_UNESCAPED_SLASHES);