2014-01-26 2 views
0

json 문자열을 가져 오는 ajax 요청이 있는데 어떤 이유로 "정의되지 않음"을 반환하기 시작했습니다. JSON 문자열은 유효한 JSON을 반환하지만 작동하지 않습니다!값을 반환하지 않는 아약스 요청

Ajax 요청 :

if (editSeq) { 
     $.ajax({ 
      url: './json/admin/getData.php', 
      type: 'POST', 
      async: false, 
      data: { SEQ: editSeq }, 
      dataType: 'json', 
      success: function (data) { 
       var HTML = data.HTML; 
       $('#blankform').append(HTML); 
       alert(HTML); 
      } 
     }); 

JSON : 이것은 내 JSON 응답입니다

<?php 
include("../../includes/db.php"); 
$SEQ = $_POST["SEQ"]; 
$sth = sqlsrv_query($conn,"SELECT HTML from TBL_DATA WHERE Sequence = " . $SEQ); 
$rows = array(); 
while($r = sqlsrv_fetch_array($sth,SQLSRV_FETCH_ASSOC)) { 
    $rows[] = $r; 
} 
if($sth === false) 
{ 
    echo "Error in query preparation/execution.\n"; 
    die(print_r(sqlsrv_errors(), true)); 
} 
print json_encode($rows); 
?> 

: 당신은에서 재산 "HTML을 '겟하려고 var HTML = data.HTML;

[ 
    { 
    "HTML": " \n\n<div id=\"div_143\" style=\"width: 300px; white-space: nowrap; padding-right: 50px; left: 60px; top: 48px;\" class=\"ui-resizable ui-draggable ui-resizable-disabled ui-state-disabled\" aria-disabled=\"true\"><label> Incident #&nbsp;<input type=\"text\" style=\"width:100%;\" id=\"input_143\" role=\"textbox\" aria-autocomplete=\"both\" aria-disabled=\"false\" aria-readonly=\"false\" aria-multiline=\"false\" class=\"jqx-widget-content jqx-widget-content-web jqx-input jqx-input-web jqx-widget jqx-widget-web jqx-rc-all jqx-rc-all-web\" placeholder=\"\" disabled=\"disabled\"><\\/label><div class=\"ui-resizable-handle ui-resizable-e\" style=\"z-index: 90;\"><\\/div><div class=\"ui-resizable-handle ui-resizable-w\" style=\"z-index: 90;\"><\\/div><div class=\"ui-resizable-handle ui-resizable-sw\" style=\"z-index: 90;\"><\\/div><div class=\"ui-resizable-handle ui-resizable-ne\" style=\"z-index: 90;\"><\\/div><div class=\"ui-resizable-handle ui-resizable-nw\" style=\"z-index: 90;\"><\\/div><div class=\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\" style=\"z-index: 90;\"><\\/div><\\/div>" 
    } 
    ] 
+1

먼저 PHP에서 매개 변수화 된 쿼리를 사용하십시오! http : // stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give -me-death.html – CenterOrbit

+0

json은 PHP 측에서 어떤 모습입니까? –

+0

인쇄 대신 에코를 사용해보십시오 ....? –

답변

1

우선, AJAX 스크립트에서 출력을 에코 한 후 항상 스크립트를 종료합니다. 다른 IF와 마찬가지로 스크립트 아래에 뭔가가있는 경우 이미 JSON 출력을 표시 한 경우 실행할 필요가 없으며 추가 출력으로 인해 JSON이 망가질 수 있으며 모든 작업이 중단됩니다.

그래서, 항상는 수행 모든

print json_encode($rows); 
exit; 

둘째, 당신은 당신이 오류 메시지가 표시되지 않는 일부 SQL 문제와 모든 문제가있을 수 있습니다 귀하의 경우. "쿼리 준비/실행 중 오류"라고 표시 될 수 있지만이를 볼 수는 없습니다! 또는 JSON을 망칠 수 있고 자바 스크립트가 .HTML 부분을 표시 할 수 없기 때문에 볼 수없는 다른 PHP 치명적인 오류가있을 수 있습니다.

귀하의 솔루션이 일시적으로 자바 스크립트를 변경, 그것을 테스트하는 것입니다 : 당신은 JSON의 최상위 요소를 배열을 갖고있는 것 같다 (당신이 당신의 JSON 출력을 추가 한 후) 모두의

$.ajax({ 
    url: './json/admin/getData.php', 
    type: 'POST', 
    async: false, 
    data: { SEQ: editSeq }, 
    // dataType: 'json', // temporarily comment it out to receive plain messages 
    success: function (data) 
    { 
     alert(data); return; // temporary line. Remove after debuging. 
     var HTML = data.HTML; 
     $('#blankform').append(HTML); 
     alert(HTML); 
    } 
}); 

셋째, 경우 그것은 당신이 자바 스크립트를 변경해야 배열하려면 [{"HTML":

로 시작

var HTML = data[0].HTML; 

또는, 많은 행이있을 수 있습니다 경우 :

var HTML = ''; 
for(i=0;i<data.length;i++) HTML += data[i].HTML;\ 
+0

올렉에게 고마워, 내 문제가 해결되었습니다! 나는 또한 다른 권고들을 고려했다. 모두에게 감사드립니다. – realtek

0

귀하의 PHP에 의해 반환 된 데이터 개체. 하지만 당신은 배열 (mysql 행)의 배열을 반환합니다. 그래서 : data.HTML은 정의되지 않았습니다.

시도 :

if (editSeq) { 
     $.ajax({ 
      url: './json/admin/getData.php', 
      type: 'POST', 
      async: false, 
      data: { SEQ: editSeq }, 
      dataType: 'json', 
      success: function (data) { 

       $('#blankform').append(data); 
       alert(data); 
      } 
     }); 

이 actualy,이 사업부 정도에 원시 데이터를 게시하는 것은 의미가 없게하지만,이 경우에 당신은 당신의 데이터를 확인하고이를 처리하기 위해 프로그램을 진행할 수 있습니다. (내 가정이 맞다면) 당신이 그들을 반복한다 data 중 행을 얻기 위하여

:

for (var n = 0; n = data.length; n++) // rows 
{ 
     alert(data[n]); // show one single row 
} 

당신의 JSON에 따르면,이 변경 될 수 있습니다

if (editSeq) { 
     $.ajax({ 
      url: './json/admin/getData.php', 
      type: 'POST', 
      async: false, 
      data: { SEQ: editSeq }, 
      dataType: 'json', 
      success: function (data) { 

       $('#blankform').append(data[0].HTML); 
       alert(data[0].HTML); 
      } 
     }); 
+0

미안에 그것을 추가했습니다. 예, 최근에 테스트를 변경했습니다. 데이터보다는 HTML ("HTML")을 사용했습니다 .HTML. "데이터"가 객체를 반환하지만 데이터 ("HTML")를 사용하는 것이 제대로 작동하지 않는 것으로 확인할 수 있습니다. – realtek

+0

'data ("HTML")'는 정의가없는 문자열 매개 변수와 함께 함수로 객체를 사용합니다. –

관련 문제