Ионный собственный HTTP-вызов с текстом / планом типа содержимого?

Я пытаюсь выполнить HTTP-вызов, и мой Content-Type - это текст / план, но я работаю с ionic-native / http, которые принимают только объект и массив, вот что я пробовал

Ошибка: расширенный-http: аргумент "данные" поддерживает только следующие типы данных: массив, объект.

TestIR(item){

  let headers = { 'Content-Type': 'text/plain'}; 
  let sender ='sendir,1:1,0,';
  let code = item.keys[10].code;
  let body = sender+code;
  let url= "http://10.75.0.120/v2/CI00e0148a";

  this.httpNative.setDataSerializer( "json" );
  this.httpNative.post(url,body,headers).then(val=> 
   {console.info(val)}).
  catch(e=>{console.info(e)})

}

Что произойдет, если вы закомментируете эту строку => this.httpNative.setDataSerializer( "json" );?

David R 19.07.2018 09:54

Не следует писать Content-Type как 'text/plain', а не как plan, если это тот тип, который вам нужен.

Geshode 19.07.2018 09:55

все же я получаю ту же ошибку

nitish 19.07.2018 09:56

Я изменил его на простой, но все равно получаю ту же ошибку @Geshode

nitish 19.07.2018 10:03

вы устанавливаете сериализатор на 'json, и я предполагаю, что ваш body не может быть преобразован в json, поскольку это не массив. вы пробовали поменять сериализатор на вариант utf8? или просто создать простой массив, чтобы включить ваше тело и передать его httpNative?

slashpm 19.07.2018 14:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
5
5 180
3

Ответы 3

Предположение: Используемый HTTP-плагин - Кордова-плагин-расширенный-http, ссылка на него содержится в Ionic Docs.

Установка сериализатора данных на json сообщает плагину, что он должен ожидать объект javascript, но тело, которое вы отправляете, является строкой

Решение 1

Если API, которому вы отправляете данные, может их обрабатывать, установите для сериализатора данных значение "utf8".

this.httpNative.setDataSerializer( "utf8" );

Это говорит плагину ожидать текста.

Решение 2

Измените тело на объект перед вызовом POST.

body = JSON.parse(json);

Строка, которую вы передаете JSON.parse(), должна быть допустимым json.

Обновлено: удалены ссылки на ошибку, которая теперь исправлена.

Если вы используете cordova-plugin-advanced-http, вы также можете сделать следующее, если хотите установить тип контента только для одного запроса.

const options: any = {
    serializer: 'utf8',
    method: 'post',
    data: 'my string value' 
};
this.http.sendRequest('https://mysite', options);

Если ваш тип ответа - json, я рекомендую проанализировать его самостоятельно с помощью JSON.parse.

Я получал ту же ошибку, и я попробовал решение @Glen Davies, но ошибка сохранялась и периодически возникала. Иногда это работало, иногда нет.

Error: advanced-http: "data" argument supports only following data types: Array, Object

Я использую приложение Ionic 3 с плагином cordova http в http-interceptor, и через несколько часов я обнаружил, что проблема заключалась в том, что даже при установке сериализатора в app.component.ts он не работал.

Решением было перемещение:

this.http.setSSLCertMode('pinned');
this.http.setDataSerializer('utf8');

К конструктору внутри HttpInterceptor.

После этого ошибка исчезла.

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