@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
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 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
Похожие вопросы