2011-12-31 11 views
-3

PHPでたくさんのHTMLを含むテーブルを作成しました。一度作成した、私はこのようなJSON文字列としてそれをエコー:JSONを介してHTMLを返すことができません

echo json_encode($array['table']); 

私はその後、jQuery.parseJSON(returnString);を使用して、DIVにそれを追加してみてください。これは、文字列を返す場合にのみ機能します。 HTMLを送信すると動作しません(この場合、何も返されません)。

誰かが間違っていることを教えていただけますか? \/" 'シンボルをjQueryに送信する前に解析するためにいくつかの関数を使用する必要がありますか?

EDIT:

マイ$arr['table']はこのようなものになります。

$arr['table'] = "<tr class=\"{$id}\">lalalal</tr>" 

を私のJSONは次のようになります。

\n\t\t\t\t\t</div>\n\t\t\t\t\tfcds\n\t\t\t\t\t</center>\ 
+0

JSONの外観はどうですか? –

+0

@AymanSafadi:更新されました。 –

答えて

6

JSON経由でHTMLデータを送信するのではなく、単に「データ」を送信してからjavascriptを使用して新しいHTML要素を作成し、要素。

jQueryの例:

var json_doc = $.getJSON('http://yourservice.com/yo/'); 
var tr = $(document.createElement('tr')); 
tr.attr('id', json_doc.responseText.id); 
tr.html(json_doc.responseText.html); 
$('table').append(tr); 

あなたhttp://yourservice.com/yo/からあなたの応答は次のようになります。

{id: 1, html: "lalalal"} 
+0

「JSON経由でHTMLデータを送信しないでください」 - なぜですか? –

+0

HTMLはJavaScriptオブジェクトではないためです。あなたが本当にしたいのであれば、 '{html: ' lalalal'}'を返して、あなたのテーブルにすぐに追加できますが、これについて考えることができます。コードも同様です。 JSONレスポンスでデータを提供するだけであれば、更新する必要があるのはテンプレートとJavaScriptですが、サーバーサイドのコードはそのままにしておきます。コントローラ、モデルなどからビューを完全に分離することです。MVCアプリケーションの設計をチェックします。 – tkone

+0

ああ、また、あなたがこれをした場合、この質問はありません:) tkone

1

私はあなただけに送信する前に、特殊文字をエスケープする必要があると思いますjq。私は通常この特別な文字をエンコードするためにhttp://phpjs.org/functions/htmlspecialchars:426を使用します。

+0

私はそれを試してみましたが、助けになりませんでした。 –

+0

それは多分スラッシュですか?ダブルエスケープを試みましたか? \\ n –

0

私はそのようにそれを呼び出すことができる場合、私は間違いを発見しました。 \"{$id}\"'{$id}'に変更した後、それは機能しました。 @tkoneが指摘したように

3

説明

:あなたはJSON経由でHTMLデータを送信すべきではない、それはその目的ではありません。
それを行うことができますが、は、すべてのHTMLあなたは出力のどちらか

を行うべきではありませんし、サーバーのページにすべての処理を行い、この

PHPのようにHTML
としてそれを返します(server_page.php)

//Connect 
$link = mysql_connect($server, $user, $password); 
//Select 
mysql_select_db($db, $link); 
//Query 
$result = mysql_query($query); 

$data = $_GET['some_data']; 

//Loop 
echo "<table id='$data'>"; 
while($row = mysql_fetch_array($result)){ 
    echo "<tr>"; 
    foreach($row as $key => $value){ 
     echo "<td>$value</td>"; 
    } 
    echo "</tr>"; 
} 
echo "</table>"; 

//Cleanup 
mysql_free_result($result); 
mysql_close($link); 

Javascriptを

var data = {"some_data": "Foobar"}; 
$.get("server_page.php", data, function(response){ 
    $("#output").html(response); 
}); 
この

PHP(server_page同様のJavascript
で処理することができ

あるいは、データと、JSONの情報として、それをあなたが出力されます。PHP)

//Connect 
$link = mysql_connect($server, $user, $password); 
//Select 
mysql_select_db($db, $link); 
//Query 
$result = mysql_query($query); 
$num_result = mysql_num_rows($result);  

$data = array(
    "mysql_data" => array(), 
    "num_result" = $num_result 
); 

//Loop 
while($row = mysql_fetch_array($result)){ 
     $data['mysql_data'][] = $row; 
} 

echo json_encode($data); 
//Cleanup 
mysql_free_result($result); 
mysql_close($link); 

Javascriptが

$.getJSON("server_page.php", function(data){ 
    alert("Number of rows returned from query: "+data.num_result); 
}); 

しかし、あなたは二つの異なる方法を混在させるべきではありません。あなたは、すべてのロジックをどこで扱うかを決定し、そこに必要なすべてのデータを渡す必要があります。


ソリューション

あなた自身は

"<tr class=\"{$id}\">lalalal</tr>" 

が正しくないJSONで、指摘したように。

それはあなたが​​や' "" 'を使用している場合

"<tr class='{$id}'>lalalal</tr>" 

すべてのJSONは、すなわち、同じ引用記号を共有する必要がありますする必要があります。

サーバー側ですべてのロジックを実行することをお勧めします。 POSTまたはGETを使用して、要求に応じていつでもJavascriptのデータを送信できます。それはあなたが知っている両方の方法になります。

+0

upvoteは、問題の解決方法のより完全な例です。 – tkone

関連する問題