2013-03-25 7 views
6

Ich möchte JSON-Daten mit HTTP-Anfrage veröffentlichen. Ich habe den offiziellen docs gelesen und arbeite nach ihnen. Ich verwende den folgenden Code ein:Problem mit POST JSON-Daten Titanium

var xhrpost = Ti.Network.createHTTPClient(); 

    xhrpost.onload = function(){ 
     activityIndicator.hide(); 
     alert('Posted successfully'); 
     alert(JSON.stringify(this.responseText)); 
    } 

    var posturl = 'http://qudova.com/api.php'; 

    xhrpost.open('POST', posturl); 
    xhrpost.setRequestHeader("Content-Type", "application/json"); 
    xhrpost.setRequestHeader('charset','utf-8'); 
     var params = { 
     ProjectID : picked_prj, 
     RoleID : picked_rol, 
     FirstName: first.value, 
     LastName: last.value, 
     Phone: phone.value, 
     Email: email.value, 
     City: city.value, 
     State: stat_drp.getSelectedRow(0).title, 
     Zip: zip.value, 
     Notes: notes.value, 
    }; 
    xhrpost.send(params); 

Ist dies der richtige Weg ist, um die JSON-Daten zu veröffentlichen. Wie würde ich überprüfen, dass Daten veröffentlicht werden? Wird die URL die geposteten Daten enthalten?

Ich bekomme NULL in der folgenden Warnung, die ich im Onload-Ereignis hinzugefügt habe.

Ich arbeite an Windows 7, Testen auf Android 4.2.2 .... Vielen Dank im Voraus.

Antwort

0

Verwendung JSON.parse

var params =JSON.parse({ 
     ProjectID : picked_prj, 
     RoleID : picked_rol, 
     FirstName: first.value, 
     LastName: last.value, 
     Phone: phone.value, 
     Email: email.value, 
     City: city.value, 
     State: stat_drp.getSelectedRow(0).title, 
     Zip: zip.value, 
     Notes: notes.value, 
    }) 

und versenden. Es kann funktionieren ...

+1

Nein, das gibt mir nur Fehler: undefiniertes Objekt. –

9

Wenn Sie Content-Type auf json setzen, müssen Sie die Eingabe stringulieren.

var xhr = Ti.Network.createHTTPClient(); 

xhr.open('POST', url); 
xhr.setRequestHeader("Content-Type", "application/json"); 
xhr.setRequestHeader('charset','utf-8'); 
xhr.send(JSON.stringify({ 
    prop: 'string', 
    data: { 
     embeddedProp: 1234 
    } 
})); 

Ausprobiert und es funktionierte, war es nicht in der Dokumentation zu finden.

+0

Ich habe mit dem gleichen Problem gekämpft, danke für Ihre Antwort. Ich verstehe nicht, warum solche Sachen nicht dokumentiert sind ... – Damian

1

Nur JSON.stringify verwenden()

JSON.stringify({ ProjectID : picked_prj, RoleID : picked_rol, FirstName: first.value, LastName: last.value,
Phone: phone.value, Email: email.value, City: city.value, State: stat_drp.getSelectedRow(0).title, Zip: zip.value, Notes: notes.value, })

Siehe docs aktualisiert.