Невозможно разобрать ответ как ошибку 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); И это работало нормально.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector