Реагируйте на выборку JS как POST для перекрестного источника, PHP возвращает 200, но без ответа тела - PullRequest
0 голосов
/ 07 июня 2019

Я знаю, что подобные вопросы задавались, но здесь ничего не получалось.Заранее спасибо!

Я использую извлечение из приложения JavaScript реагирования (расположенного по адресу http://localhost:3000), также для публикации данных и получения ответа от локального PHP API (с использованием XAMPP и по адресуhttp://local.api.mysite.com/user)

Каждый раз, когда я получаю статус 200 без каких-либо возвращенных заголовков или тела. Если я перехожу на URL-адрес PHP в моем браузере, он работает просто отлично

Я убедился, что corsустановить в js и php, установить типы контента, отключить кэширование и попробовать все предложенные исправления здесь и в Google.

Это последнее средство

JS:

fetch('http://local.api.mysite.com/user', {
    method: 'POST',
    mode: 'cors',
    headers: {
        'Content-Type': 'application/json',
        'Cache-Control': 'no-cache'
    },
    body: JSON.stringify(data),
    }).then(console.log(response))

PHP:

// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header("Cache-Control: no-cache");
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
        header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
    exit(0);
}
$output = json_encode(['status' => 'recieved']);
header('Content-Length: '.strlen($output));
header('Content-Type: application/json');
echo $output;
exit;

Ранее я ограничивал свои заголовки PHP более строгими, но я нашел этот блок кода и использую его для пропуска чего-либо для тестирования.

Решение Комментарий Рикина к его ответу позволил мне открыть инструменты разработчика, перейти на вкладку сети и просмотреть ответ напрямую. Это показало, что произошла ошибка сервера, которая привела к пустому ответу со статусом 200

1 Ответ

1 голос
/ 07 июня 2019

Это fetch вопрос о том, как он построен. Вы получаете поток ответа, который вам нужно либо проанализировать как json, либо text, либо blob, а затем искать фактический ответ, который мы ожидаем. Я изменил код чуть ниже, чтобы получить то, что вам нужно.

fetch('http://local.api.mysite.com/user', {
  method: 'POST',
  mode: 'cors',
  headers: {
    'Content-Type': 'application/json',
    'Cache-Control': 'no-cache'
  },
  body: JSON.stringify(data),
})
.then(data => data.ok && data.json())
.then(response => console.log(response));

Вот что вы получите при ответе: https://developer.mozilla.org/en-US/docs/Web/API/Response

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...