2014-03-30 2 views
2

AngularjsCodeIgnitor으로 애플리케이션을 구축했습니다. angularjs는 $resource service을 사용하여 $scope 데이터를 설정하고 시작시 ng-init을 사용하여 메소드를 가져옵니다.HTTP에서 큰 데이터가있는 json 객체 깨짐

적은 양의 데이터로도 문제가 없지만 많은 양의 데이터로 인해 응용 프로그램이 실패합니다. GET 매개 변수 제한과 같은 GET 응답에 데이터 크기 제한이 있습니까?

오류 :

Error: JSON.parse: end of data after property value in object 

스크립트 :

app.factory('FamilyFind', ['$resource', 'Data', function ($resource, Data) { 
    return $resource(Data.rootUrl + 'admin/family_find/:id', {id: '@id'}, 
    { 
     query: { 
     isArray: true, 
     method: 'GET' 
     }, 
     update: { 
     method: 'PUT' 
     } 
    } 
); 
}]); 

// load serverside data using http resource service 

FamilyFind.get({}, function (response) { // success 

    $scope.tableData = response.data; // store result to variable 

}, function (error) { // ajax loading error 

    Data.errorMsg(); // display custom error notification 
    // error caught here 
}); 

내가 백엔드 서비스 philsturgeon CodeIgnitor RESTful API를 사용하고 있습니다.

CodeIgnitor 컨트롤러 :

function family_find_get($id = '', $type = 'json') { 

    $this->response->format = $type; 
    $family    = $this->family_registration_model->find($this->get()); 

    if($family) { // success 
    $this->response(array('data' => $family), 200); 
    } else { // error 
    $this->response(array('data' => array()), 200); 
    }  
} 

CodeIgnitor 모델 :

function find($data) { 
    $query = "SELECT dev_members.name, dev_family.house_name, dev_family.house_no, dev_family.place, 
       dev_family.post, dev_family.phone,mem.male,mem.female 
       FROM dev_family 
       JOIN dev_members ON dev_members.id = dev_family.family_head_id 
       LEFT JOIN (SELECT family_id,SUM(gender = 'Male') AS male, SUM(gender = 'Female') AS female FROM dev_members) AS mem ON mem.family_id = dev_family.id WHERE dev_family.family_reg_no != ''"; 

    if(isset($data['cluster']) && $data['cluster'] != '') { 
     $query.=" AND dev_family.cluster_id = ".$data['cluster'].""; 
    } 

    $query = $this->db->query($query); 
    return $query->result(); 
} 

편집 : 나는 서버 측의 응답을 디버깅 할 때

, 그것은 주를 보여줍니다 json 객체가 자동 종료되지 않음 어. JSON 포매터에,

{"data":[{"name":"abc","house_name":"dfdfgdfg","house_no":"1","place":"School Road","post":"dsfdfg","phone":"1111111","male":"278","female":"264"},{"name":"dgdfg","house_name":"dgdfg","house_no":"2","place":"School Road","post":"dfgdfg","phone":"111111","male":null,"female":null},{"name":"dgdfg","house_name":"dgdfg dgd","house_no":"3","place":"School Road","post":"dfgdg","phone":"11111","male":null,"female":null},{"name":"dgg","house_name":"dgdfg","house_no":"4","place":"School Road","post":"dggd","phone":"11111","male":null,"female":null}] 

오류를 500 개 기록에서 추출 된 샘플 데이터를 참조하십시오

Error: Parse error on line 1: 
...null,"female":null}] 
-----------------------^ 
Expecting '}', ',', got 'EOF' 

을 내가 추가 할 때 데이터를 위해 RESTClient 부가 기능에 사용하는 말 }에 가까운 개체, 괜찮 았어.하지만이 문제는 어떻게 서버 측에서 해결할 수 있습니까? 왜 대용량 데이터에서만 발생합니까?

업데이트 :

나는 문제가 philsturgeon REST Controller library에 있음을 깨달았다. 대신

$this->response(array('data' => $family), 200); 

,의 나는

echo json_encode(array('data'=>$family)); 

을 시도 그리고 지금은 일하고 fine.Anyone는 philsturgeon REST Controller library에서이 문제를 해결하는 방법을 알고?

Github Issue here.

답변

3

데이터 크기 자체에 문제가 있다고 생각하지 않습니다. 응답은 일반적으로 제한되지 않습니다 (작동 또는 다른 이유로 인해 서버가 연결을 닫고 클라이언트가 데이터를 가져 오는 경우가 있기는하지만).

올바른 데이터가 있는지 확인하십시오. ',', '', '{', '}'와 같은 특수 기호가있는 일부 데이터 (일반적으로 텍스트 데이터)는 이전 경험에서 약간의 문제에 직면했습니다.손상 될 수 있습니다. 그것은 클라이언트 측이 올바르게 처리 할 수 ​​있도록 서버 측 프레임 워크가 이러한 심볼을 올바르게 처리 할 수있는 방법에 따라 다릅니다. 서버 측의 로그에 결과를 출력하고 JSON 데이터가 올바른지 확인하십시오.

+0

질문 업데이트를 참조하십시오. – devo