У меня есть многострочная строка в JSON от ввода textarea - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь написать небольшую социальную сеть.Итак, у меня есть форма с textarea, чтобы написать и отправить сообщение.Теперь, если я хочу написать, например:

Здравствуйте, это первая строка
, а это вторая строка

, она точно так же хранится в моей базе данных.Теперь, если я хочу вывести сообщение, я запрашиваю базу данных и формирую строку JSON.Проблема в том, что новая строка также находится в строке JSON, поэтому, конечно, я получаю эту ошибку: JSON.parse: плохой управляющий символ в строке

Я пробовал что-то с nl2br (), но ничего не помогло.

Это код для формирования строки json с данными постов из базы данных

$response = "[";
                  foreach($followingposts as $post) {
                          $response .= "{";
                                  $response .= '"PostId": '.$post['id'].',';
                                  $response .= '"PostBody": "'.$post['body'].'",';
                                  $response .= '"PostedBy": "'.$post['username'].'",';
                                  $response .= '"PostDate": "'.$post['posted_at'].'",';
                                  $response .= '"Likes": "'.$post['likes'].'"';
                          $response .= "},";
                  }
                  $response = substr($response, 0, strlen($response)-1);
                  $response .= "]";
                  http_response_code(200);
                  echo $response;


И это запрос Ajax для отображения постов на временной шкале


      $.ajax({
                      type: "GET",
                      url: "api/profileposts?username=<?php echo $profileusername;?>",
                      processData: false,
                      contentType: "application/json",
                      data: '',
                      success: function(r) {
                              var posts = JSON.parse(r)
                              $.each(posts, function(index) {
                                      $('.timelineposts').html(
                                              $('.timelineposts').html() + '<blockquote class="blockquote" style="margin-left:45px;max-width:650px;width:auto;margin-bottom:40px;"><p class="mb-0" style="color:rgb(255,255,255);">'+posts[index].PostBody+'</p><footer class="blockquote-footer" style="color:rgb(137,137,137);font-weight:500;">von '+posts[index].PostedBy+'<button data-id="'+posts[index].PostId+'" class="btn btn-primary" type="button" style="background-color:rgb(30,40,51);padding-right:0px;padding-left:0px;padding-top:0px;padding-bottom:0px;margin-left:15px;border:none;"><i class="fa fa-heart" style="font-size:27px;color:rgb(255,0,0);"></i><span style="color:rgb(255,0,0);margin-left:15px;">'+posts[index].Likes+' Likes</span></button></footer></blockquote>'
                                      )

                                      $('[data-id]').click(function() {
                                            var buttonid = $(this).attr('data-id');
                                            $.ajax({
                                                type: "POST",
                                                url: "api/likes?id=" + $(this).attr('data-id'),
                                                processData: false,
                                                contentType: "application/JSON",
                                                data: '',
                                                success: function(r) {
                                                  var res = JSON.parse(r)
                                                  $("[data-id='"+buttonid+"']").html('<i class="fa fa-heart" style="font-size:27px;color:rgb(255,0,0);"></i><span style="color:rgb(255,0,0);margin-left:15px;">'+res.Likes+' Likes</span>')
                                                  console.log(r)
                                                },
                                                error: function(r) {
                                                  console.log(r)
                                                }
                                            });
                                      })
                              })
                      },
                      error: function(r) {
                              console.log(r)
                      }
              });


1 Ответ

0 голосов
/ 15 февраля 2019

Если вы запрашиваете псевдонимы для имен столбцов, то это просто:

SELECT id AS PostId,
       body AS PostBody,
       username AS PostedBy,
       posted_at AS PostDate,
       likes AS Likes
       FROM table_name ....

Затем извлеките строки в $followingposts, как и раньше, и выведите JSON:

echo json_encode($followingposts);

Вот и все.

Если это CMS или приложение, в котором вы фактически не строите запрос, то:

foreach($followingposts as $post) {
    $response[] = array(
    'PostId'   => $post['id'],
    'PostBody' => $post['body'],
    'PostedBy' => $post['username'],
    'PostDate' => $post['posted_at'],
    'Likes'    => $post['likes']);
}
echo json_encode($response);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...