Ajax иногда не удается проанализировать большой ответ JSON

#php #jquery #mysql #ajax

#php #jquery #mysql #ajax

Вопрос:

Я вызываю службу PHP с приведенным ниже кодом ajax :

     jQuery.ajax({
    url: 'index.php?option=com_sheetamp;task=getReportsData',
    timeout: 300000,
    dataType: "json",
    type: "GET",
    data: {        
        'project': projectsStr,
        'startweek': startweek,
        'endweek': endweek        
    }
}).done(function(response) {    
    if (response.success amp;amp; response.data) {
        var projectData = response.data;
        if (projectData.projectReportData.length > 0) {
            loadDataTable(response.data);
        } else {
            jQuery('#projectReportData').html("<br/><h2>No Matching Results</h2>");
        }
    }
}).fail(function(jqXHR, textStatus) {
    jQuery(".overlay")[0].style.display = '';
    if (textStatus === 'timeout') {
        alert('Failed from timeout');        
    }
    alert(textStatus);
});
  

php-код, который предоставляет ответ, печатает ответ с :

 $data = (object)array_merge(['projectReportData' => $projectReportData]);
header("Content-Type: application/json");
$post_data = json_encode($data, JSON_FORCE_OBJECT);
ob_start('ob_gzhandler');   
echo new JResponseJson($data);
ob_end_flush();
jexit();
  

Этот ajax иногда работает нормально и способен анализировать JSON. Но в большинстве случаев выдает «parsererror».
Приведенный ниже код извлекает данные из базы данных :

 $db = JFactory::getDbo();
  $query = "CALL getReportData('" . $startweek . "','" . $endweek . "')";
  $db->setQuery($query);     
  $res = $db->query($query);
  $returnArr = [];
  $i = 0;
  while( $r = $res->fetch_assoc()){
    $projectReportData[$i] = $r;
    $i  ;

  }
  

когда я меняю dataType на text , указатель достигает .done() но console.log(response) возвращает пробел.

Комментарии:

1. можете ли вы распечатать код, который вы используете для извлечения данных, предоставленных из jquery

2. Вы должны быть в состоянии извлечь json (строку), когда она выдает эту ошибку, а затем поместить ее в анализатор json (например jsonlint.com ), чтобы увидеть, в чем проблема.

3. @MohammedYassineCHABLI, это уже упоминалось в вопросе. вам нужно что-нибудь еще?

4. Браузеры действительно не предназначены для OLAP — вам, вероятно, следует пересмотреть свой дизайн — возможно, сгенерировать / обобщить отчет на стороне сервера

5. @SalilLambay Откройте свою консоль и проверьте, в чем проблема, или перехватите вашу ошибку в методе fail.