2017-10-23 2 views
0

Ich versuche, einen JSON-Array als Parameter nativer über HTTP senden mit IONIC 3. Dies ist die Anfrage:Beitrag JSON-Array mit IONIC 2/3

HTTPResponse = await this.http.post(url, 
body, headers); 

Dies ist der vollständige Code. Ich verwende HTTP von '@ ionic-native/http'. Dies ist der vollständige Code

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); 

ich mit anderen Anfrag ähnlichen Code bin mit und alles wird gut, der einzige Unterschied ist, dass die Anforderung, das hat einen einfachen Parameter in JSON Körpern wird. Dies ist der Wunsch, die gut läuft:

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); 

Antwort

0

Aktualisiert Antwort:

Wenn Sie einen Blick auf die source-file der Android-Implementierung der Post Aktion, die Sie sehen, dass ein JsonObject wie erwartet Aus diesem Grund führt das Übergeben eines Arrays zu einem JSON error. Sie haben das Array in einem Objekt, so zu wickeln, diese Arbeit zu machen:

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, 
); 

Alte Antwort:

Ich denke, Ihr Content-Typeapplication/x-www-form-urlencoded ist so müssen Sie einen Namen für Sie Parameter hinzufügen, die ist getrennt von dem Wert, der durch ein Gleichheitszeichen (=):

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}`; 

der entsprechende Teil der Beschreibung here gefunden werden kann. Punkt 2. lautet:

Die Steuerelementnamen/-werte werden in der Reihenfolge aufgeführt, in der sie im Dokument angezeigt werden. Der Name wird vom Wert durch `= 'getrennt und Name/Wert-Paare werden durch` &' voneinander getrennt.

+0

Ich habe die Frage bearbeitet, um Ihnen mehr Informationen zu geben. Das Problem hängt mit IONIC 3 zusammen und ich benötige einen gültigen Code für dieses Framework. – Joterito

+0

Ah, Sie sollten erwähnt haben, dass Sie das native HTTP-Plugin verwenden, bitte werfen Sie einen Blick auf die aktualisierte Antwort. – David

+0

Ich habe Ihren Code getestet, aber er ist nicht serverseitig gültig. Ich habe versucht, JSON per REST-Client zu senden und alles läuft gut. aber ich kann nicht den gleichen Körper in meiner Client-App erstellen. Ihr Code enthält ein myarray-Feld, das vom Server nicht erwartet wird. Irgendeine zusätzliche Idee? – Joterito