PHP标记周围的空格导致ajax调用有额外的空格

时间:2013-06-01 15:35:20

标签: php ajax whitespace

我有一个小问题,一直困扰我很长一段时间,但我似乎无法自己解决。我用谷歌搜索,并没有找到任何有用的东西。我想,也许其他人遇到了这个问题,或将来遇到它,所以我们可以互相帮助。

问题; 我制作了一个包含项目的下拉列表。在此下拉列表下有一个textarea。当用户从下拉列表中选择项目时,其内容将加载到textarea中。当我向textarea添加一些文本时,只要按空格键或输入,它就会自动保存。但问题是,PHP似乎在文本之前添加了2个换行符。我做了一些截图来说明这一点。

  1. 第一张图片显示了Mysql数据库中的文本。
  2. 在textarea中显示内容时,您可以看到以某种方式跳过前两行。记事本外观只是我在textarea中设置的背景图片。
  3. 在向其添加一些文本并按空格键后,它会保存内容,而在Mysql中它会跳过第一行。
  4. 在内容文本区域中,它会跳过一条线,如图所示。
  5. 屏幕截图:http://s9.postimg.org/suh6u3a7j/1234.png

    有谁知道为什么会这样?我该如何解决?

    这是一些代码;

    <script>
      $(function(){
      $("textarea[id='projectcontent']").keypress(function(e) {
          //13 maps to the enter key
          if (e.keyCode == 13 || e.which == 13 || e.keyCode == 32 || e.which == 32 || e.keyCode == 8 || e.which == 8) {
              saveContent();
          }
      });
    });
    

    <script>
            function getContent()
            {
                var mail = $("#email").val();
                var project = $("#projects").val();
    
                $.ajax({
                    type : "POST",
                    url : "/includes/projects.php",
                    data : "project=" + project+  "&email=" + mail+ "&mode=get",
                    success : function(result)  {  $("#projectcontent").val(result);  }
                });
            }
        </script>
    
    <script>
            function saveContent()
            {
                var mail = $("#email").val();
                var project = $("#projects").val();
                var projectcontent = $("#projectcontent").val();
    
                $.ajax({
                    type : "POST",
                    url : "/includes/projects.php",
                    dataTyp: 'html',
                    data : "project=" + project+  "&email=" + mail+ "&projectcontent=" +projectcontent+ "&mode=save",
                    success : function(result)  {  $("#response").val(result);  }
                });
            }
        </script>
    

    下拉和textarea

    <div id="project">
            <?php
            $projects = new project();
            $projects = $projects->getProjects($_SESSION['user']);?>
            <form><select id="projects" onchange="getContent()"><option>Select project</option>
                <?php
                foreach($projects as $project)
                {?>
                    <option value="<?php echo $project['id'];?>"><?php echo $project['name']; ?></option>
                <?php
                }
                ?>
            </select><input type="hidden" id="email" value="<?php echo $_SESSION['user']; ?>" /></form><span id="response"></span><br /><textarea id="projectcontent" onkeydown="enterkey()"></textarea>
            </div>
    

    用于保存内容的PHP代码。

    //set project content
    public function setProjectContent($projectid, $email, $projectcontent) {
        $spc    =   $this->db->prepare('update projects set content=? where id=? and owner=?');
        $spc->execute(array(trim($projectcontent, ""), $projectid, $email));
        if ($spc->rowCount()==1){
            $message = "Saved";
        }
        else {$message = "Not saved";}
        return $message;
    }
    

    获取内容的PHP代码。

    //get project content
    public function getProjectContent($projectid, $email) {
        $this->projectid= $projectid;
        $this->email = $email;
        $gpc    =   $this->db->prepare('select content from projects where id=? and owner=?');
        $gpc->execute(array($projectid, $email));
        $result =   $gpc->fetch();
        $content = $result['content'];
        return $content;
    }
    
    编辑:好的,问题解决了。这可能对其他人有用; 问题只是我在其中一个包含文件中有一些空格。删除空格解决了这个问题!

2 个答案:

答案 0 :(得分:3)

我认为您的PHP代码(具有AJAX功能或包含其中一个功能的代码)可能具有<php标记(或其他地方)前面的白名单。

更改ajax代码调用的php方法,使其返回硬编码值。当你再次测试它时,你可以确定它不是内部逻辑,看看线是否仍在那里。例如:

//get project content
public function getProjectContent($projectid, $email) {
    $this->projectid= $projectid;
    $this->email = $email;
    $gpc    =   $this->db->prepare('select content from projects where id=? and owner=?');
    $gpc->execute(array($projectid, $email));
    $result =   $gpc->fetch();
    $content = $result['content'];
    return "test on first line";
}

编辑:对于在php文件中寻找空格的人,我制作了一个正则表达式,找到它们(\s\<\?)|(\?\>\s)

答案 1 :(得分:1)

$("#projectcontent").val(result);这是将值设置为textarea的代码,对吗?然后你可以innerHtml() js起作用。 另外,在保存textarea内容时,您可以执行$.trim($var)功能修剪。