2

と で構築されたアプリケーションがAngularjsありCodeIgnitorます。angularjs は、起動時に$resource service get メソッドを$scope使用してデータを設定します。ng-init

少ないデータで正常に動作しますが、アプリケーションは大量のデータで失敗します。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 フォーマッターのエラー:

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));

そして今、それは正常に動作しています.誰でもこれを解決する方法を知っていますphilsturgeon REST Controller libraryか?

Github の問題はこちら

4

1 に答える 1

3

データサイズ自体に問題があるとは思いません。通常、応答は制限されません (ただし、長時間の操作やその他の理由により、サーバーが接続を閉じ、クライアントが切断されたデータを取得する可能性があります)。

そこに正しいデータがあることを確認してください。以前の経験では、「,」、「」、「{」、「}」などの特殊記号を含むデータ (通常はテキスト データ) が破損する可能性があるという問題に直面しました。クライアント側が正しく処理できるように、サーバー側フレームワークがこれらのシンボルをどのように正しく処理できるかによって異なります。サーバー側で出力をログに出力できれば、JSON データが正しいかどうかを確認できます。

于 2014-03-30T06:34:24.723 に答える