Возвращает строку вместо json-объекта

305
28 февраля 2017, 18:39

Есть файл, в котором обрабатываются данные и есть прокси, который написан для для кросс-доменных запросов. Файл, в котором обрабатываются данные, в результате своей работы возвращает json-объект. Однако, если обращаться к этому файлу через прокси-файл, то почему-то возвращается простая строка, которую почему-то невозможно распарсить при помощи JSON.parse в jQuery. Прокси:

require('../../engine/functions.php');
$origin = getDomain($_SERVER['SERVER_NAME']);
header('Access-Control-Allow-Origin: https://search.' . $origin);
$data = $_POST['data'];
//var_dump($data);
if(isset($data) && !empty($data)) {
    $options = array(
        'http' => array(
            'header'           => [
                "Content-type: application/x-www-form-urlencoded",
                "X-Requested-With: XMLHttpRequest"
            ],
            'method'  => 'POST',
            'content' => http_build_query(array('data' => $data))
        )
    );
    $context  = stream_context_create($options);
    $result = file_get_contents('https://' . $origin . '/engine/search.php', false, $context);
    if ($result === false) { 
        header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);
        die();
    }
    echo json_encode($result, JSON_UNESCAPED_UNICODE);
    die();
}

При попытке парсить такую строку на клиенте, происходит ошибка Uncaught SyntaxError: Unexpected token in JSON at position 0. Что с этим можно сделать?

Answer 1

Странно, но почему-то PHP по прежнему возвращает строку, а не json-массив(хотя, должен возвращать json). Но это пол беды. Дело было в том, что почему-то первый символ в строке был - пробел. Из-за чего JSON.parse не хотел принимать строку и начинать её конвертирование в json-объект. Проблема решилась удалением пробела.

JSON.parse(data.trim())
Answer 2

Также для запроса json можно в php установить заголовок header('content-type:application/json'); а в jQuery указать тип данных $.ajax({url:[url], dataType:'json'})

READ ALSO
Как прибавить к времени до ровного значения?

Как прибавить к времени до ровного значения?

У меня в системе есть автоматические задачи при изменении статуса клиента, автоматически ставится задача у которой есть значение "выполнить...

193
Вывод таблицы в 3 колонки

Вывод таблицы в 3 колонки

Хочу вывести таблицу с данными в 3 колонки - не получаетсяПрошу помочь

255
Почему не работает фильтр woocommerce?

Почему не работает фильтр woocommerce?

Добрый день,уважаемые форумчане,достался мне недоделанный сайт,прошлый разработчик по желанию заказчика сделал вывод категорий по ID на отдельных...

380
Пакет Блога для Laravel 5.3

Пакет Блога для Laravel 5.3

Подскажите готовый пакет блога для интеграции в работающий проектВсе что я видел до этого мешают работе основного проекта либо сложно управляются

271