2016-09-03 5 views
0

저는 아약스의 POST 요청을 받아들이고 응답을 되돌려주는 PHP 스크립트를 작성했습니다. 모두 잘 작동합니다. 그러나 문자를받는 문자 분할 문자는 이유가 무엇인지 이해할 수 없습니다. 'ImagePath를' 하지만 편지에 의해 분할 편지로 출력을주고있다 :JSON 값이 제대로 표시되지 않습니다.

여기

$("#btn").click(function(){ 
      console.log($("#search_bar").val()); 
      var dataV; 
      var htmlText = ''; 
      var containerbootsrap = ''; 
      var filename = ''; 
      var index_no; 
       $.ajax({ 
        type: "POST", 
        crossDomain: true, 
        url: "http://localhost:8090/ontology/setText", 
        data: $("#search_bar").val(), 
        contentType: 'text/plain', 
        // dataType: "json", 
        success: function(data, textStatus, jQxhr){ 
         console.log('data'); 
         console.log(data); 

         for(var item in data) { 
         console.log ("item: " + item); 
         console.log ("data: " + data[item]); 
         index_no = data[item]; 

         // htmlText += '<div class="div-conatiner">'; 
         // htmlText += '<p class="p-name"> Name: ' + data[item] + '</p>'; 
         // htmlText += '<img class="imageload" src="' + data[item] + '" />'; 
         // htmlText += '</div>'; 

         // filename = data[item].replace(/^.*[\\\/]/, '') 

         $.ajax({ 
          data: 'index_no=' + index_no, 
          url: 'retrivedata.php', 
          method: 'POST', // or GET 
          dataType: 'json', 
          success: function(msg) { 
            console.log(msg); 
            for(var item in msg){ 
             console.log ("item: " + item); 
             console.log ("data: " + msg[item]); 
            } 

            $('#home').hide(); 

            containerbootsrap += '<div class = "container" id="search_container">'; 
            containerbootsrap += '<div class = "row homepage">'; 
            containerbootsrap += '<div class = "col-md-5 col-md-offset-3">'; 
            containerbootsrap += '<a href="#" class="thumbnail">'; 
            containerbootsrap += '<img class="imageload" src="' + msg + '" />'; 
            containerbootsrap += '<h3 id="video_name"> ' + filename + ' </h3>' 
            containerbootsrap += '</a>'; 
            containerbootsrap += '</div>'; 
            containerbootsrap += '</div>'; 
            containerbootsrap += '</div>'; 

            $('body').append(containerbootsrap); 

            } 
         }); 

         // $.post('retrivedata.php', { num: 5 }, function(result) { 
         //  alert(result); 
         // }); 

         // $('#home').hide(); 
         } 

         // $('body').append(containerbootsrap); 

        }, 
        error: function(jqXhr, textStatus, errorThrown){ 
         console.log(jqXhr); 
         alert(jqXhr) 
        } 

       }); 
     }); 

PHP 코드는 내가로 출력을 필요

<?php 
$index_no = $_POST["index_no"]; 
// echo $index_no * 2; 

include('dbConnection.php'); 
$query = mysql_query("SELECT * FROM video_data WHERE index_no = $index_no"); 

while ($row = mysql_fetch_assoc($query)) { 
    $imagePath = $row['thumbnail_url']; 
    $videoPath = $row['video_url']; 
    // echo $imagePath; 
    // echo $videoPath; 
    echo json_encode($imagePath); 
} 

?> 

아래, 내 AJAX 코드입니다.

여기에 실제 출력

Output

에게 있습니다하지만 난 한 줄의 출력이 필요합니다. like /video_frames/bb/frame136.jpg 내가 잘못 가고있는 곳을 찾아 내도록 도와주세요.

+0

당신은 출력을 게시 할 수 있습니까? 그리고 단지 팁, 당신은 브라우저에서'header ("Content-Type : application/json");로 기대할 수있는 것을 PHP로 알려줄 수 있습니다; –

+0

'echo json_encode $ imagePath);'while while, 그리고 만약 당신이 단지 하나의 행을 기대하고 있다면'while'을 쓸 필요가 없습니다. –

+0

제가 기억한다면 json_encode는'string'을 제시 할 때 예측할 수없는 결과를냅니다. 그 문자열을'array ($ imagePath)'와 같은 배열에 넣을 수 있습니까? – Forbs

답변

0

글쎄, 값을 반환하는 PHP 코드에서 배열이 아닌 문자열을 지정해야합니다. $ imagePath의 변수는 문자열 인 것 같습니다. 이런 식으로 할 수 있습니다.

echo json_encode(array('result' => $imagePath)); 

이렇게하면 '결과'키가 표시됩니다. 당신은 그것을 파싱하고 그것을 사용할 수 있습니다.

+0

이제 JugalK 값이 결과 키에 지정됩니다. 하지만 클라이언트에서 변수를 가져 오는 방법을 이해하지 못합니다. 도와주세요 – KAz

+0

{ "result": "\/video_frames \/bb \/frame136.jpg"} json 님이 그렇게 해주고 있습니다. 나는 (obj의 var 항목)에서 읽으려고한다. { console.log ("item :"+ item); console.log ("data :"+ obj [item]); }하지만 작동하지 않습니다. – KAz

+0

작동하는 매력. 도움을 주셔서 감사합니다 JugalK – KAz

0

반환 된 JSON 문자열을 구문 분석하여 배열로 변환해야합니다. 이를 수행하는 한 가지 방법은 data = $.parseJSON(data)을 ajax 성공 콜백에 추가하는 것입니다 (아래 강조 표시). 나는 당신이보고있는 것과 똑같은 것을 재현 할 수 있었고이 라인을 추가함으로써 그것을 고칠 수있었습니다. 희망이 도움이됩니다. parseJSON()

... 
    success: function(data, textStatus, jQxhr){ 
        console.log('data'); 
        console.log(data); 

data = $.parseJSON(data);

   for(var item in data) { 
        console.log ("item: " + item); 
        console.log ("data: " + data[item]); 
        index_no = data[item]; 
... 
+0

답변 해 주셔서 감사합니다. 그러나 이것은 사실이 아닙니다. 두 번째 아약스 호출에 몇 가지 문제가 있습니다. – KAz

+0

두 번째 ajax 호출에서'... for (var item in msg) {...'루프 앞에'msg = $ .parseJSON (msg);'을 추가 했습니까? – DragonSpirit

+0

예 jquery가 예기치 않은 토큰을 제공하고 있습니다. – KAz

0
당신이 그렇지 않으면 모듈 좋은 안정성을 줄 것이다

data = '{"name": "Bhushan"}' //string value 
data = {name: "Bhushan"}  //object value 

//for testing you can use either, this will make it unbreakable for this context 

if(typeof(data) == 'string') 
{ 
    data = JSON.parse(data) 
} 
//rest of code 

이 같은 첫째지고 변수 값의 유형을 확인하는

더 나은 방법 당신은 얻을 수 있습니다 json 예기치 않은 토큰을 구문 분석 o.

관련 문제