Fetch in react native не отправляет сообщение с помощью codeIgniter API

Получение сообщения не работает с json api, закодированным с помощью codeIgniter. Метод get работает, но есть проблема в методе post. Ключ не распознается между реагирующим родным и воспламенителем кода. Любая помощь приветствуется. Спасибо

 fetch('http://zzz.com/login', {
   method: 'POST',
   headers: {
     Accept: 'application/json',
    'Content-Type': 'application/json', 
  },
  body: JSON.stringify({
     username: 'abc',
   }),
 })
 .then(response => response.json())
 .then(responseJson => {
   console.info('responseJson', responseJson);
 })
 .catch((error) => {
   console.error('fetchError', error);
 });

Контроллер CodeIgniter

public function login()

{
    $un = $this->input->post('username'); //why doesn't the key 'username' is working here
    echo json_encode($un);
}

ЖУРНАЛ КОНСОЛИ:

responseJson false

Обновления:

1) Использование json_decode дает ошибку "fetchError SyntaxError: Неожиданный конец ввода JSON"

public function login()
{
   $Data = json_decode(file_get_contents('php://input'), false);
     echo $Data;
 }

2) Использование json_encode дает следующие результаты: responseJson {"имя пользователя": "abc"}

public function login()
{
   $Data = json_encode(file_get_contents('php://input'), false);
     echo $Data;
 }

Обновление 1:

1) Использование только file_get_contents дает результат как: responseJson {username: "abc"}

public function login()
{
    $Data = (file_get_contents('php://input'));
    echo $Data;
 }

2) использование var_dump и json_decode в коде сервера дает следующую ошибку в консоли приложения

public function login()
{
    $Data = json_decode(file_get_contents('php://input'), true);
    var_dump ($Data);
 }

Ошибка:

fetchError SyntaxError: Unexpected token a in JSON at position 0
    at parse (<anonymous>)
    at tryCallOne (E:\zzz\node_modules\promise\setimmediate\core.js:37)
    at E:\zzz\node_modules\promise\setimmediate\core.js:123
    at E:\zzz\node_modules\react-native\Libraries\Core\Timers\JSTimers.js:295
    at _callTimer (E:\zzz\node_modules\react-native\Libraries\Core\Timers\JSTimers.js:152)
    at _callImmediatesPass (E:\zzz\node_modules\react-native\Libraries\Core\Timers\JSTimers.js:200)
    at Object.callImmediates (E:\zzz\node_modules\react-native\Libraries\Core\Timers\JSTimers.js:464)
    at MessageQueue.__callImmediates (E:\zzz\node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:320)
    at E:\zzz\node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:135
    at MessageQueue.__guard (E:\zzz\node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:297)

console регистрирует ответ, как показано ниже, дает массив в консоли приложения:

fetch('http://zzz.com/login', {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json',
  },
   body: JSON.stringify({
     username: 'abc',
   })
})
.then((response) => console.info('response', response))

Консоль:

response 
Response {type: "default", status: 200, ok: true, statusText: undefined, headers: Headers, …}
headers:Headers {map: {…}}
ok:true
status:200
statusText:undefined
type:"default"
url:"http://zzz.com/login"
_bodyInit:"array(1) {↵  ["username"]=>↵  string(3) "abc"↵}↵"
_bodyText:"array(1) {↵  ["username"]=>↵  string(3) "abc"↵}↵"
__proto__:Object

Есть ли у CodeIgniter десериализатор JSON тела запроса?

kadeer 25.12.2018 13:10

Скорее всего, нет, поэтому вам, возможно, придется прочитать необработанный поток, используя что-то вроде json_decode(file_get_contents('php://input'), true). echo, что в действии входа в систему, чтобы увидеть результат. Я бы также добавил, чтобы дезинфицировать ввод, прежде чем что-либо делать с ним.

kadeer 25.12.2018 13:17

@kadeer с использованием эха json_decode ничего не дает, но если я использую $ a = json_encode (file_get_contents ('php: // input'), true); echo $ a; Результатом будет fetchResponsee {"username": "abc"}.

beck 26.12.2018 07:43

Пожалуйста, ознакомьтесь с обновлениями выше

beck 26.12.2018 09:09

Привет, извините, я должен был предложить var_dump вместо echo. Если вы получаете сообщение «Неожиданный конец ввода JSON», в действии входа в систему см. Результат этого: file_get_contents('php://input'). Это должно вернуть содержимое POST в необработанном виде. Убедитесь, что вы видите правильный JSON.

kadeer 26.12.2018 12:39

Привет, @kadeer, он дает следующий результат: {username: "abc"}. И, пожалуйста, взгляните и на Обновление 1.

beck 27.12.2018 06:32

Кажется, что сброс file_get_contents('php://input') показывает, что содержимое ввода - это данные, которые вы отправили в значении тела в параметрах AJAX. Вы должны иметь возможность json_decode вводить в действительный массив PHP. До сих пор не работает?

kadeer 29.12.2018 00:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
1 376
1

Ответы 1

Попробуйте добавить режим same-origin, как показано ниже:

fetch('http://zzz.com/login', {
   method: 'POST',
   credentials: 'same-origin',
   mode: 'same-origin',
   headers: {
     'Accept': 'application/json',
     'Content-Type': 'application/json', 
   },
   body: JSON.stringify({
     username: 'abc',
   }),
 })
 .then(response => response.json())
 .then(responseJson => {
   console.info('responseJson', responseJson);
 })
 .catch((error) => {
   console.error('fetchError', error);
 });

Боюсь, это не сработало. Пожалуйста, взгляните на обновления выше. Спасибо

beck 26.12.2018 09:10

Попробуйте отправить данные без json stringify, а затем декодировать тело: {username: 'abc'},

somsgod 27.12.2018 06:34

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