【问题标题】:unwanted leading space inside data from a table column表列数据中不需要的前导空格
【发布时间】:2021-10-23 08:59:13
【问题描述】:

名为story 的列是文本类型
单击一个按钮我有一个 jquery ajax 来从该列获取数据 - 在特定的 id

<div id='bstory'></div>

在服务器端我有:

function a_click($id){
    global $db;
    $sq = "select story from dict where id = :aid limit 1";
    $st = $db->prepare($sq);
    $st->execute([":aid" => $id]);
    echo $st->fetchColumn();
}

在客户端:

$(document).on('click', '.atitle', function(){
    let id = $(this).attr('data-id');
    $.post('a_dict_pro.php', {fn: 'a_click', args: [id]}, function(data){
        console.log(data);
        $(bstory).text(data);
    });
});

一切正常
问题 - data之前有一个前导空格
在这两个地方 - bstoryconsole
例如,如果列内容是 lorem ipsum(没有空格)-我得到 lorem ipsum(有空格)
如果我写data = data.trim() - 没有空格
我确定表格列内没有那个空间
请帮忙

【问题讨论】:

  • 您能否在尝试访问数据的任何地方都包含您的 jquery 代码
  • @groovy_guy - 我认为它不相关,但它就在这里,我做到了
  • 你能提供console.log(data);的输出吗?
  • @Reflective - 正如我所说 - `lorem ipsum` - 包括前导空格

标签: javascript php jquery


【解决方案1】:

我将尝试解释您遇到的问题。执行 PHP 代码时,在回显之前和回显输出之后可能会有一些空格、行和其他符号。将被退回。所以你应该做的事情是确保你在&lt;?php标签之前没有任何空格或线条,并在回应你的回应后立即退出,即像echo $st-&gt;fetchColumn(); exit;或类似的东西。

如果您将结果输出为 JSON 字符串(即将获取的 DB 行转换为 JSON 字符串并将响应标头设置为 application/json),则可以避免所有这些不便;比您的 data 实际上是一个数组或对象,并且在 JSON 解码期间,这将由 $.post 自动进行,即使您有空格或其他所谓的空符号,它们也会被自动剥离或忽略。对于 JSON 解析器,字符串是 {} 还是 {} 没有显着差异;

我希望我描述得很好。

现在您知道为什么传递 JSON 作为响应比传递简单字符串更好。

【讨论】:

  • 你是对的 - 在开始 &lt;?php 标记之前有一个空格。多谢。我永远不会注意到这一点。顺便说一句 - 为什么这个空间完全回响 - 它不是 echo 声明的一部分
  • 开始和结束标签之前的空格是文件的一部分,通常它们会出现在输出中。
  • hmm...该文件还有很多其他部分--函数、声明、空行等-这不是要回应的原因。我认为应该只回显 echo 语句中的内容。这是一个正常的逻辑,不是吗?
  • Nope :) 这就是为什么 API 处理程序应该在开头以避免额外的空行等,即您的 php 文件中的第一件事应该是 &lt;?php .... 然后做你所做的,即处理请求...然后设置输出头,然后echo $result; exit; ?&gt;
  • &lt;?php ?&gt; 内的空格不计算在内,但它们之外的所有空格、行和符号都会出现在输出中,即如果您在 php 文件中的所有内容是 ` `php 开始和结束标记前后的空格也将添加到输出中,因此您实际上将输出 'hello',而不是 'hello'
猜你喜欢
  • 2013-06-16
  • 2022-08-13
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 2018-10-08
  • 1970-01-01
相关资源
最近更新 更多