Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ionic framework 带有离子2/3的Post JSON数组_Ionic Framework_Ionic3 - Fatal编程技术网

Ionic framework 带有离子2/3的Post JSON数组

Ionic framework 带有离子2/3的Post JSON数组,ionic-framework,ionic3,Ionic Framework,Ionic3,我正在尝试使用HTTP native和IONIC 3发送一个JSON数组作为参数。请求如下: HTTPResponse = await this.http.post(url, body, headers); 这是完整的代码。我正在使用来自“@ionic native/HTTP”的HTTP。这是完整的代码 import { HTTP, HTTPResponse } from '@ionic-native/http'; [...] let body = '[{"userId":

我正在尝试使用HTTP native和IONIC 3发送一个JSON数组作为参数。请求如下:

 HTTPResponse = await this.http.post(url, 
 body, headers);
这是完整的代码。我正在使用来自“@ionic native/HTTP”的HTTP。这是完整的代码

 import { HTTP, HTTPResponse } from '@ionic-native/http';

 [...]

 let body =  '[{"userId": 1, "timestamp":"2018-10-12T18:00:00.000+02", 
 "audit":"MENUTEST"},{"userId": 1, "timestamp":"2018-10-
 12T18:00:00.000+02", "audit":"MENUTEST"},{"userId": 1, 
 "timestamp":"2018-10-12T18:00:00.000+02", "audit":"MENUTEST"}]';

 //Auth header
 let headers = { Authorization: `Bearer ${token}`};

 let httpResponse: HTTPResponse = await 
 this.http.post(URL_data, JSON.parse(body), headers); 
我在其他请求中使用了类似的代码,一切都很顺利,唯一的区别是请求在JSON主体中有一个简单的参数。这是一个进展顺利的请求:

import { HTTP, HTTPResponse } from '@ionic-native/http';

[...]

let body = '{ "username": "usuario.prueba1", "password": "' + 
Md5.hashStr('prueba') + '", "customerCode": "1234DEV" }';

let httpResponse: HTTPResponse = await 
this.http.post(URL_login, JSON.parse(body), headers); 
最新答复:

如果您查看一下post操作的android实现,您将看到一个JsonObject作为参数,这就是传递数组将导致JSON错误的原因。您必须将数组包装在这样的对象中才能执行此操作:

let body = {
  myArray: [
    {
      userId: 1,
      timestamp: '2018-10-12T18:00:00.000+02',
      audit: 'MENUTEST',
    },
    {
      userId: 1,
      timestamp: '2018-10-12T18:00:00.000+02',
      audit: 'MENUTEST',
    },
    {
      userId: 1,
      timestamp: '2018-10-12T18:00:00.000+02',
      audit: 'MENUTEST',
    },
  ],
};

let headers = { Authorization: `Bearer ${token}` };
let httpResponse: HTTPResponse = await this.http.post(
  URL_data,
  body,
  headers,
);
旧答案:

我猜您的内容类型是application/x-www-form-urlencoded,因此您需要为参数添加一个名称,该名称与值之间用等号=:

可以找到规范的相关部分。第2点。说:

控件名称/值按它们在文档中的显示顺序列出。名称与值之间用“=”分隔,名称/值对之间用“&”分隔


为了支持深层结构,您应该更改序列化程序。 尝试设置http.setDataSerializerjson;并像往常一样发送数据:http.postrl,body,{}

检查以下答案:

为了给您提供更多信息,我对问题进行了编辑。这个问题与IONIC 3有关,我需要这个框架的有效代码。啊,你应该提到你正在使用本机HTTP插件,请查看更新的答案。我已经测试了你的代码,但它对服务器端无效。我已经尝试通过REST客户端发送JSON,一切都很顺利。但是我不能在我的客户端应用程序中创建相同的主体。您的代码包含服务器不需要的myarray字段。还有其他想法吗?然后你必须更改服务器端代码,以便它可以读取json对象,或者你不使用ionic原生http插件。您也可以使用angulars HttpModule进行此调用。最后,我使用了angulars模块,但我遇到的主要问题是应用程序执行中的-c-l参数。这些参数正在修改请求中的行为。内容类型被忽略。非常感谢,但问题可能不在代码中。
let payload = [{ "userId": 3, "timestamp": "2018-10-12T18:00:00.000+02", "audit": "Mensaje 3" }, { "userId": 4, "timestamp": "2018-10-13T18:00:00.000+02", "audit": "Mensaje 4" }];
let body = `MyArray=${payload}`;