2017-04-18 10 views
0

RESTクライアントは「200 OK」を返します。Appcelerator Titanium:GUI RESTクライアントで動作する同じデータでcreateHTTPClientが失敗する

enter image description here

createHTTPClientは全く同じデータを "HTTPエラー" を返します。ペイロードを削除すると応答が得られます。ペイロードをclient.send(ペイロード)に追加するとエラーが発生します。私は将来の要求のためにペイロードを渡す必要があります。

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

答えて

1

あなただけこれに最後の行を変更する必要があります。

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

理由があるため、アプリケーションのJSONにコンテンツタイプを設定しているので、あなたがあなたの入力データを文字列化する必要があるということですサーバがヘッダーセットごとにそれを解析できるようにする。

+0

それは働いた! 「シリアライズ可能なJavaScriptオブジェクトを渡すと、自動的にフォームエンコードされたPOSTデータに変換され、任意の文字列またはバイナリデータ(Titanium.Blobの形式)を送信することもできます。 createHTTPClientのsend()メソッドのドキュメントから削除します。 – AdamG

+0

LiveView ON状態は、Webサービス呼び出しに影響しません。これは、例えば、プッシュ通知。 –

0

・ホープ、このことができます。この

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

で試してみてください。私はあなたのAPI呼び出しで適切にパラメータを送信する処理していないと思う。

+0

私はユーザー名とパスワードのポスト変数も一緒に送信する必要があります。どのようにそれらを含めるのですか? – AdamG

1

エラーの種類は表示されませんが、ペイロードがテキストであることが予想されている間にオブジェクトを送信しようとしていることが考えられます(client.setRequestHeader('Content-Type', 'application/json');コードあり)。これを試してみてください:

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

それはうまくいった! 「シリアライズ可能なJavaScriptオブジェクトを渡すと、自動的にフォームエンコードされたPOSTデータに変換され、任意の文字列またはバイナリデータ(Titanium.Blobの形式)を送信することもできます。 createHTTPClientのsend()メソッドのドキュメントから削除します。 – AdamG

+0

@AdamGそれを聞いてうれしい –

関連する問題