javascript
  • php
  • jquery
  • json
  • ajax
  • 2016-12-27 63 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) 
        }); 
    
    相關問題