Невозможно разобрать ответ как ошибку JSON Symfony

У меня есть контроллер, который отправляет запрос get, а затем пытается проанализировать ответ как JSON. Однако запрос его через браузер возвращает допустимый объект JSON. Я получаю ошибку 500, которая говорит: "Исключение: невозможно проанализировать ответ как JSON" и указывает на JsonHandler.php в Httpful библиотека. Я просмотрел файл, и это потому, что тело пусто. Я запутался, так как URL-адрес запроса действителен и возвращает действительный объект JSON.

Controller.php

        Authorization::checkUser();
        $request = $this->request;

        $callback = $request->query->get('callback');
        $url = 'http://example.com/api/get_recent_posts/?' . http_build_query(
            [
                'count'     => 20,
                'post_type' => 'schedule_show',
                'page'      => (int) $request->query->get('page', 1),
                'order'     => 'ASC',
                'orderby'   => 'title',
                'include'   => 'id,title',
                '_'         => (int) $request->query->get('_', time()),
            ]
        );

        /** @var \Httpful\Response $APIResponse */

        $APIResponse = \Httpful\Request::get($url, 'application/json')->send();
        $data = $APIResponse->body;
        $response = new JsonResponse($data);

        $response->setCallback($callback);

        return $response;

Ответ JSON:

     {  
   "status":"ok",
   "count":20,
   "count_total":70,
   "pages":4,
   "posts":[  
      {  
         "id":2473,
         "title":"ACOUSTIC ROOTS"
      },
      {  
         "id":2531,
         "title":"AFRIKA REVISITED"
      },
      {  
         "id":2542,
         "title":"AMANECER RANCHERO"
      },
      {  
         "id":2551,
         "title":"APNIVANI"
      },
      {  
         "id":2504,
         "title":"APT 613 LIVE"
      },
      {  
         "id":6229,
         "title":"ATMOSPHERE"
      },
      {  
         "id":2532,
         "title":"BLACK ON BLACK"
      },
      {  
         "id":2550,
         "title":"BOUYON RASIN"
      },
      {  
         "id":2462,
         "title":"CAN-ROCK"
      },
      {  
         "id":2534,
         "title":"CARIBBEAN FLAVOUR"
      },
      {  
         "id":5288,
         "title":"CHUO TOP 30"
      },
      {  
         "id":6060,
         "title":"CINEMASCOPE"
      },
      {  
         "id":2930,
         "title":"CITY SLANG"
      },
      {  
         "id":2524,
         "title":"CYPHER"
      },
      {  
         "id":2484,
         "title":"D’UN EXTR\u00caME \u00c0 L’AUTRE"
      },
      {  
         "id":2478,
         "title":"DEMOCKERY’S DEMISE"
      },
      {  
         "id":2438,
         "title":"DEMOCRACY NOW!"
      },
      {  
         "id":2546,
         "title":"ETHIOPIAN SHOW"
      },
      {  
         "id":5930,
         "title":"FREESTYLE"
      },
      {  
         "id":6247,
         "title":"FR\u00c9QUENCE ANTILLAISE"
      }
   ]
}

Запрос AJAX:

$.ajax('/shows/select/load', {
  data: {
    count: 20,
    post_type: 'schedule_show',
    page: this.page_current,
    order: 'ASC',
    orderby: 'title',
    include: 'id,title'
  },
  dataType: 'jsonp',
  context: this,
  success: this.loadShows
});

Я что-то пропустил?

Редактировать: метод, который пытается проанализировать тело и выдает исключение.

JsonHandler.php:

public function parse($body)
    {
        $body = $this->stripBom($body);
        if (empty($body))
            return null;
        $parsed = json_decode($body, $this->decode_as_array);
        if (is_null($parsed) && 'null' !== strtolower($body))
            throw new \Exception("Unable to parse response as JSON");
        return $parsed;
    }

Для целей отладки я добавил следующие операторы var_dump:

public function parse($body)
    {
        var_dump($body);
        $body = $this->stripBom($body);
        var_dump($body);
        if (empty($body))
            return null;
        var_dump($this->decode_as_array);
        $parsed = json_decode($body, $this->decode_as_array);
        var_dump($parsed);
        if (is_null($parsed) && 'null' !== strtolower($body))
            throw new \Exception("Unable to parse response as JSON");
        return $parsed;
    }

Это вернулось:

string(1) " " 
string(1) " " 
bool(false) 
NULL

1 ответ

Решение

Проблема была в Request.php в функции send, Метод использует curl и после проверки ответа после curl_exec он возвращал код 301 с пустым телом. Все, что мне нужно было сделать, это установить новый параметр скручивания curl_setopt($this->_ch, CURLOPT_FOLLOWLOCATION, true); И это работало нормально.

Другие вопросы по тегам