2011-12-31 4 views
-3

PHP로 많은 HTML을 포함하는 테이블을 만들었습니다. 일단 생성되면,이 같은 JSON 문자열로 그것을 밖으로 에코 :JSON을 통해 HTML을 반환하지 않습니다.

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

그때 jQuery.parseJSON(returnString);을 사용하고 DIV에 추가하려고합니다. 이것은 문자열을 반환하는 경우에만 작동합니다. HTML을 보낼 때 작동하지 않습니다 (이 경우 전혀 반환되지 않습니다).

아무도 나에게 어떤 문제가 있다고 말할 수 있습니까? \/" ' 기호를 jQuery로 보내기 전에 구문 분석 할 몇 가지 함수를 사용해야합니까?

는 편집 :

$arr['table'] 다음과 같은 :

내 JSON은 다음과 같습니다
$arr['table'] = "<tr class=\"{$id}\">lalalal</tr>" 

:

\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 데이터를 보내지 말고 "데이터"를 보내고 자바 스크립트를 사용하여 새 HTML 요소를 만들고 DOM을 수정합니다 집단.

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 응답에 데이터를 제공하면 템플릿 및 자바 스크립트 만 업데이트하면되지만 서버 측 코드는 그대로 두십시오. 컨트롤러, 모델 등에서보기를 깨끗하게 분리하는 것입니다. MVC 응용 프로그램 디자인을 확인하십시오. – tkone

+0

오, 그리고, 당신도이 질문을하지 않았을 것입니다. tkone

1

나는 당신이 단지로 전송하기 전에 특수 문자를 탈출 할 필요가 있다고 생각 jq. 일반적으로이 lib http://phpjs.org/functions/htmlspecialchars:426을 사용하여 특수 문자를 인코딩합니다.

+0

나는 그것을 시도했다, 도움이되지 않았다. –

+0

아마 슬래시일까요? 이중 탈출을 시도 했습니까? \\ n –

0

나는 실수를 발견했다. 내가 \"{$id}\"'{$id}'으로 바꾼 후에 그것은 효과가 있었다. @tkone는 지적

3

설명

: 당신이 JSON을 통해 HTML 데이터를 전송해서는 안, 그 목적이 아니다.
그것은 할 수 있지만,

어느 쪽이든 당신 출력 모든 HTML

일을하지 말아야하며, 서버 페이지에서 모든 처리를 수행하고 HTML로이

PHP처럼
을 반환 (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); 

자바 스크립트

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

PHP (server_page처럼 자바 스크립트
에서 처리 할 수 ​​

또는 데이터, 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); 

자바 스크립트

$.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을 통해 언제든지 자바 스크립트의 일부 데이터를 보낼 수 있습니다. 그것은 당신이 아는 두 가지 방법입니다.

+0

upvote는 문제를 해결하는 방법에 대한 훨씬 더 완벽한 예입니다. – tkone

관련 문제