2017-04-18 4 views
0

Le client REST renvoie "200 OK" - C'est bon!Appcelerator Titanium: createHTTPClient échoue avec les mêmes données qui fonctionnent dans le client REST GUI

enter image description here

retourne createHTTPClient "d'erreur HTTP" avec les mêmes données. Quand je supprime la charge, j'obtiens une réponse, quand j'ajoute la charge utile dans client.send (payload), j'obtiens l'erreur. Je dois transmettre la charge utile pour les demandes futures.

var payload = { 
    username: 'test', 
    password: 'test' 
    }; 

var url = "https://MYWEBSITE.com/rest_login/user/token.json"; 

var client = Ti.Network.createHTTPClient({ 
    // function called when the response data is available 
    onload : function(e) { 
     Ti.API.info("Received text: " + this.responseText); 
     alert('success'); 
    }, 
    // function called when an error occurs, including a timeout 
    onerror : function(e) { 
     Ti.API.error(e.error); 
     alert('error'); 
    }, 
    timeout : 5000 // in milliseconds 
}); 
// Prepare the connection. 
client.open("POST", url); 
client.setRequestHeader('Content-Type', 'application/json'); 
// Send the request. 
client.send(payload); 

Répondre

1

Vous avez juste besoin de changer la dernière ligne à ceci:

client.send(JSON.stringify(payload)); 

La raison en est que, puisque vous définissez le type de contenu à JSON d'application, de sorte que vous devez stringify vos données d'entrée de l'objet dictionnaire afin que le serveur puisse l'analyser selon l'en-tête.

+0

Cela a fonctionné! J'ai été découragé par "Si vous passez un objet JavaScript sérialisable, il est automatiquement transformé en données POST codées par formulaire.Vous pouvez également envoyer une chaîne arbitraire ou des données binaires (sous la forme d'un Titanium.Blob)." à partir de la documenttion pour la méthode send() dans createHTTPClient. – AdamG

+0

L'état ON de LiveView n'affecte pas les appels de services Web. Cela affecte principalement les rappels de par ex. Notification push. –

0

Essayez avec cette

var xhr = Ti.Network.createHTTPClient(); 

    xhr.onload = function(e) { 

     var myObjectString = JSON.parse(this.responseText); 
     alert(myObjectString.token); 
     Ti.API.info("Received text: " + myObjectString.token); 
    }; 

    xhr.onerror = function(e) { 
     Ti.API.error(e.error); 
     alert('error'); 
    }; 

    xhr.open('POST', 'https://my.cgps.org/rest_login/user/token.json'); 
    xhr.setRequestHeader('Content-Type', 'application/json'); 

    xhr.send(); 

Hope this helps. Je pense que vous n'avez pas géré les paramètres d'envoi correctement dans votre appel d'API.

+0

Je dois aussi envoyer des variables post pour le nom d'utilisateur et le mot de passe. Comment puis-je les inclure? – AdamG

1

Vous ne montrez pas quel type d'erreur vous obtenez, mais je suppose que le problème est que vous essayez d'envoyer un objet alors que la charge utile devrait être du texte (vous avez client.setRequestHeader('Content-Type', 'application/json'); dans votre code). Essayez ceci:

// Send the request. 
client.send(JSON.stringify(payload)); 
+0

Cela a fonctionné! J'ai été découragé par "Si vous passez un objet JavaScript sérialisable, il est automatiquement transformé en données POST codées par formulaire.Vous pouvez également envoyer une chaîne arbitraire ou des données binaires (sous la forme d'un Titanium.Blob)." à partir de la documenttion pour la méthode send() dans createHTTPClient. – AdamG

+0

@AdamG agréable d'entendre que –