2013-12-20 3 views
1

JSON 데이터와 페이지 매김 링크를 반향시키는 PHP 함수가 있습니다. 데이터는 정확히 이와 같습니다.AJAX 요청에서 JSON 데이터 스크랩

[{"name":"John Doe","favourite":"cupcakes"},{"name":"Jane Citizen","favourite":"Baked beans"}] 
Previous 
Next 

이 데이터를 얻으려면 jQuery.ajax() 함수를 사용하십시오. 내 코드는 다음과 같습니다 : -

function loadData(page){     
    $.ajax 
    ({ 
     type: "POST", 
     url: "http://sandbox.dev/favourite/test", 
     data: "page="+page, 
     success: function(msg) 
     { 
      $("#area").ajaxComplete(function(event, request, settings) 
      { 
       $("#area").html(msg); 
      }); 
     } 
    }); 
} 

jQuery를 사용하여, 어쨌든 나는 데이터가 AJAX 요청에서 반환 긁어 JSON 데이터를 사용할 수 있습니까? 아니면 이것을하는 더 좋은 방법이 있습니까? 나는 실험하고 JSON 데이터를 페이지 매기기를하고 싶습니다.

+0

왜 성공 처리기에서'ajaxComplete'를 사용합니까? 그것을 제거하고'# 영역 '을 직접 채 웁니다. – raina77ow

+0

'ajaxComplete' 함수는 필요 없습니다.'success' 콜백 함수에 이미'$ ("# area") .html (msg);'를 넣으면됩니다. – Christoph

+0

'.indexOf()'또는 정규식 메서드로'.split()'또는'.substr()'을 사용하여 모든 것을 첫 번째 캐리지 리턴까지 가져온 다음 JSON으로 구문 분석 할 수 있지만 PHP가 반환하는 이유는 무엇입니까? 보여지는 형식? – nnnnnn

답변

4

JSON 이후에 HTML 링크를 추가하는 것과 같은 형식을 고안하지 않는 것이 좋습니다. JSON은 이미 필요한 모든 구조를 보유 할 수 있습니다. 예를 들어 다음과 같은 양식을 사용할 수 있습니다 : 그것은 아주 쉽게 구문 분석 할 수있는 클라이언트 측에

{ 
    "data": [ 
     {"name": "John Doe", "favourite": "cupcakes"}, 
     {"name": "Jane Citizen", "favourite": "Baked beans"} 
    ], 
    "pagination": { 
     "prev": "previous page URL", 
     "next": "next page URL" 
    } 
} 

:

$.ajax({ 
    url: "URL", 
    dataType:'json', 
    success: function(resp) { 
     // use resp.data and resp.pagination here 
    } 
}); 
+1

+1 이것이 해결책입니다! – Christoph

+1

이것은 훨씬 깨끗합니다! JSON 응답의 일부로 페이지 매김 값을 포함하도록 PHP를 다시 작성했습니다. 나는 이것을 업 그레 이드 할 수 있었으면 좋겠다. 그러나 나는 충분한 담당자가 없다. 포인터 고마워. – NAT3863

+0

가능한 경우 upvote로 돌아가는 것을 잊지 마십시오;) – vbo

0

이 작업을 시도 할 수 있습니다 : -

var jsObject = JSON.parse(your_data); 

data = JSON.parse(gvalues); 
var result = data.key; 
var result1 = data.values[0]; 
+0

하지만 데이터가 유효한 JSON이 아니므로 JSON 다음에 다른 텍스트가 표시됩니다 ... – nnnnnn

1

JSON 객체를받을 아약스 요청에 dataType와을 넣어하거나 문자열을 받게됩니다.

"이전"과 "다음"을 json에 넣으면 유효하지 않습니다. 당신의 PHP 파일에서

function loadData(page){     
    $.ajax({ 
     type: "POST", 
     url: "http://sandbox.dev/favourite/test", 
     data: {'page':page}, 
     dataType:'json', 
     success: function(msg){ 
      if(typeof (msg) == 'object'){ 
       // do something... 
      }else{ 
       alert('invalid json'); 
      } 
     }, 
     complete:function(){ 
      //do something 
     } 
    }); 
} 

와 ..이처럼, 당신의 JSON 객체 ... 사용을 console.log를 보려면 헤더

header("Content-type:application/json"); 
// print your json.. 

을 넣어 :

// your ajax.... 
success:(msg){ 
if(window.console) console.dir(typeof(msg), msg); 
} 

당신의 변경 json을 다음과 같이 변경합니다. (유효성을 검사하려면 jsonlint를 사용하십시오 - http://jsonlint.com/)

{ 
    "paginate": { 
     "previous": "http...previsouslink", 
     "next": "http...nextlink" 
    }, 
    "data": [ 
     { 
      "name": "JohnDoe", 
      "favourite": "cupcakes" 
     }, 
     { 
      "name": "JaneCitizen", 
      "favourite": "Bakedbeans" 
     } 
    ] 
} 
+0

json이 유효하지 않은 경우 수동으로 dataType을 설정하면 도움이되지 않습니다 ... – Christoph

+0

yeap @Christoph! 그래서 내가 당신이 "이전"과 "다음"을 당신의 json에 넣으면 ** "**"넣을 것입니다. ** ". 반환 할 때 json을 확인할 수 있습니다. if (typeof (msg) == 'object') {} else {alert ('invalid json');} –

1

을 대신 내가 당신을 제안하려는 JSON 데이터를 긁어의 순수한 JSON 데이터를 반환 . 귀하의 유스 케이스에 따라 나는 PreviousNext을 쓸 필요가 없다고 생각합니다. 반환 URL의 첫 번째 객체가 Previous이고 다음 객체가 Next 인 것으로 추측됩니다. 아래 문자열을 반환하면됩니다.

[{"name":"John Doe","favourite":"cupcakes"},{"name":"Jane Citizen","favourite":"Baked beans"}] 

아래와 같이 읽습니다.

function loadData(page){     
    $.ajax 
    ({ 
     type: "POST", 
     url: "http://sandbox.dev/favourite/test", 
     dataType:'json', 
     success: function(msg) 
     { 
      var previous = msg[0]; //This will give u your previous object and 
      var next = msg[1]; //this will give you your next object 

      //You can use prev and next here. 

      //$("#area").ajaxComplete(function(event, request, settings) 
      //{ 
      // $("#area").html(msg); 
      //}); 
     } 
    }); 
} 

이 방법은 전체 HTML을 변경하지 않을 데이터 만 반환합니다.

관련 문제