与内容类型文本/计划的离子本机HTTP调用?

时间:2018-07-19 07:53:18

标签: javascript angular http ionic-framework ionic3

我正在尝试进行HTTP调用,但是我的Content-Type是text / plan,但是我正在使用ionic-native / http进行操作,该操作只使用对象和数组,这是我尝试过的

错误:Advanced-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.log(val)}).
  catch(e=>{console.log(e)})

}

3 个答案:

答案 0 :(得分:3)

假设:所使用的HTTP插件是cordova-plugin-advanced-http,从Ionic Docs链接。

将数据序列化器设置为json告诉插件期望使用javascript对象,但是您要发送的正文是字符串

解决方案1 ​​

如果您要发送数据的API可以处理它,请将数据序列化器设置为"utf8"

this.httpNative.setDataSerializer( "utf8" );

这告诉插件期望输入文本。

解决方案2

在调用POST之前将主体更改为对象。

body = JSON.parse(json);

您传递给JSON.parse()的字符串必须是有效的json。

编辑:删除了对现已修复的错误的引用

答案 1 :(得分:0)

如果您使用的是cordova-plugin-advanced-http,并且只想为一个请求设置内容类型,也可以执行以下操作。

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

如果您的响应类型为json,建议您使用JSON.parse自己解析。

答案 2 :(得分:0)

我收到相同的错误,我尝试了@Glen Davies解决方案,但错误仍然存​​在并且断断续续。 有时它曾经有用,有时却没有。

Update()

我在SetDestination()中使用了带有cordova http插件的Ionic 3应用程序,几个小时后,我发现问题是即使在Error: advanced-http: "data" argument supports only following data types: Array, Object中设置了序列化程序,不起作用。

解决方案正在移动:

http-interceptor

转到app.component.ts内部的构造函数。

此后,错误消失了。