javascript
  • php
  • jquery
  • json
  • ajax
  • 2016-12-27 73 views 1 likes 
    1

    我使用AJAX和PHP来创建一个帖子并立即显示。我的PHP代码用于创建帖子,但是我无法通过json编码来显示刚刚创建的帖子。像这样对html进行编码似乎会在每个/之前添加一个\,导致html以一种奇怪的方式中断和显示。 (我正在使用JSON编码,因为如果出现错误,我需要一个变量来知道它是否是错误,并在与帖子不同的地方显示错误)JSON如何在PHP中对HTML进行编码?

    这是我想要的编码

    $data = "<article class='post'><div class='post-head cf'> 
         <a class='userpic' href=''><img src='$userpic' alt='".$rowuser['username']."'></a> 
         <a href='' class='username'>".$rowuser['username']."</a></div> 
         <img src='users/user_".$rowuser['user_id']."/posts/".$row['image']."' alt=''> 
         <div class='post-body'> 
         <div class='post-options'> 
         <a class='likes' href=''>156 likes</a> 
         </div> 
         <p><a class='username' href=''>".$rowuser['username']."</a>".$row['body']."</p> 
         <hr /><div class='cf'> 
         <a class='like hide-text' href='javascript:;'>Like This Post</a> 
         <form action='' class='comment'> 
         <input type='text' placeholder='Add a comment'></form></div> 
         </div></article>"; 
    
    echo json_encode($data); 
    
    +1

    为什么选择JSON? Theres没有理由不使用html ... –

    +0

    @Jonasw当创建帖子时,上传图片时会出现很多错误,如果这是我需要能够显示错误的情况。在ajax中,我预先设置了对feed的响应,但是如果出现错误,我希望将响应追加到不同的div中以查找错误。为了做到这一点,我必须使用JSON发送一个变量加上响应,以便在出现错误时首先检查ajax,然后选择显示响应的位置。现在,如果没有错误,Ajax已经在寻找一个json对象,如果它没有收到它,它不会做任何事情 –

    回答

    1

    编码的HTML这样似乎每前添加\ /致使 的HTML打破

    PHP is escaping the slashes while encoding。这可以通过添加JSON_UNESCAPED_SLASHES标志防止调用json_encode()时:

    $data = "<html></html>"; 
    
    $escaped = json_encode($data); 
    // string(16) ""<html><\/html>"" 
    var_dump($escaped); 
    
    $unescaped = json_encode($data, JSON_UNESCAPED_SLASHES); 
    // string(15) ""<html></html>"" 
    var_dump($unescaped); 
    
    +0

    看起来像这是工作!然而,它也吐出了“”包装变量的HTML:无论如何,我可以删除它?我知道我可以用jquery做,但是宁愿在它之前删除它们。 –

    +0

    如果你选择删除它,它将不再是有效的JSON,它只是一堆HTML。当然,如果你想'echo $ data' vs'echo json_encode($ data,...)',你只需'echo'HTML而不用json_encoding它。 – HPierce

    +0

    嗯好吧,我想生病只是使用jQuery的片去除它们,非常感谢 –

    0

    裹误差为JSON作为字符串: response.php

    { 
    <?php If(someerror){ ?> 
    error:"<html>yourhtml</html>", 
    <?php } ?> 
    } 
    

    现在你可以这样做:

    $.ajax("response.php",function(data){ 
        data=JSON.parse(data); 
        if(data.error){ 
         $("#error").append(data.error); 
         return; 
        } 
        //work with the obj (data) 
        }); 
    
    相关问题