@Tokenchik

Как починить json?

Собираю json для ajax запроса. Html разметка делает его невалидным, как решить эту проблему?

$response = array(
            "html" => $template,
            "show" => 'true'
        );
      header('Content-type: application/json; charset=utf-8');
      $json = json_encode($response );


Если я убираю в массиве данные html - то все нормально, и ajax спокойно все разбирает. Ошибка именно со стороны PHP.
Вот в таком виде он почему то не разбирается никак.
5a7737e959988181686239.jpeg
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 2
  • OKyJIucT
    @OKyJIucT
    Sunshine reggae
    Единственное, что видно - конфликт кавычек - сам HTML использует двойные кавычки, и в двойные кавычки он же и завернут. Попробуйте так

    $json = json_encode($response, JSON_HEX_QUOT);
    Ответ написан
  • rabbit418
    @rabbit418
    23 yo Designer from Ukraine
    Ну самое простое можно $template прогнать через urlencode(), а на клиенте разобрать обратно через decodeURIComponent().

    <?php
    $template = implode("\n", [
    	'<!DOCTYPE html>',
    	'<html lang="en">',
    	'<head>',
    		'<meta charset="UTF-8">',
    		'<title>Document</title>',
    	'</head>',
    	'<body>',
    		'<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima consectetur placeat, doloribus, qui eaque quas laborum fuga voluptas dolorum distinctio illo quibusdam quia cum, inventore quos. Quo ipsam sed asperiores.</p>',
    	'</body>',
    	'</html>'
    ]);
    
    $response = array(
        "html" => urlencode($template),
        "show" => 'true'
    );
    header('Content-type: application/json; charset=utf-8');
    $json = json_encode($response);
    
    echo $json;
    ?>


    <script>
    var data = new FormData();
    data.append("foo", "bar");
    
    var xhr = new XMLHttpRequest();
    xhr.withCredentials = true;
    
    xhr.addEventListener("readystatechange", function () {
      if (this.readyState === this.DONE) {
        console.log(decodeURIComponent(this.responseText));
      }
    });
    
    xhr.open("GET", "/ajax");
    
    xhr.send(data);
    </script>
    Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
РАНХиГС Москва
от 90 000 до 100 000 руб.
Blogman Оренбург
от 20 000 до 110 000 руб.
15 июля 2018, в 15:03
18000 руб./за проект
15 июля 2018, в 14:20
5000 руб./за проект