Извлечь в реагировать родной не отправляет сообщение с API codeIgniter - PullRequest
0 голосов
/ 25 декабря 2018

Fetch post не работает с API-интерфейсом json, закодированным с помощью 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.log('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 {" username ":" 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)

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

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

1 Ответ

0 голосов
/ 25 декабря 2018

Попробуйте добавить режим 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.log('responseJson', responseJson);
 })
 .catch((error) => {
   console.error('fetchError', error);
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...