2014-03-30 91 views
2

我有AngularjsCodeIgnitor构建的应用程序。 angularjs设置$scope数据使用$resource service在启动时使用ng-init获取方法。打破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对象不自动关闭LY。看到从500+记录中提取的采样数据,

{"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}] 

误差在JSON格式器:

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