簡體   English   中英

在HTTP GET中使用大數據破壞json對象

[英]Breaking json object with large data in HTTP GET

我有一個使用AngularjsCodeIgnitor構建的應用程序。 angularjs在啟動時使用ng-init使用$ resource服務的 get方法設置$scope數據。

使用較少的數據可以正常工作,但是使用大量數據的應用程序將失敗。 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對象沒有自動關閉。 查看從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 Formatter中的錯誤:

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

當我添加數據對象在接近年底}使用RESTClient實現插件,它的工作fine.But我怎么能解決服務器端的這個問題呢? 為什么只在大數據時發生呢?

更新:

我已經意識到問題出在philsturgeon REST Controller library 代替,

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

我努力了,

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

現在一切正常,任何人都知道如何在philsturgeon REST Controller library解決此問題?

Github問題在這里

我認為問題不在於數據大小本身。 響應通常不受限制(盡管由於操作時間長或服務器關閉連接以及客戶端獲取剪切數據的任何其他原因,有一些可能性)。

請更好地檢查那里是否有正確的數據。 在以前的經驗中,某些帶有特殊符號(如“,”,“'',“ {”,“}”等)的數據(通常是文本數據)可能會損壞,因此我遇到了一些問題。 這取決於服務器端框架如何正確處理這些符號,以便客戶端可以正確處理它們。 如果可以將輸出打印到服務器端的日志中,然后檢查JSON數據的正確性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM