Appcelerator Titanium:createHTTPClient 因在 GUI REST 客户端中工作的相同数据而失败

Appcelerator Titanium: createHTTPClient fails with same data that works in GUI REST client

REST 客户端 returns“200 OK”- 很好!

createHTTPClient returns "HTTP error" 使用完全相同的数据。当我删除 payload 时,我得到了响应,当我在 client.send(payload) 中添加 payload 时,我得到了错误。我确实需要为将来的请求传递有效负载。

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

试试这个

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 调用中没有正确处理发送参数。

你没有显示你得到了什么样的错误,但我想问题是你试图发送一个对象,而有效负载应该是文本(你的代码中有 client.setRequestHeader('Content-Type', 'application/json');)。试试这个:

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

您只需要将最后一行更改为:

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

原因是,由于您将 content-type 设置为应用程序 json,因此您需要将字典 object 的输入数据字符串化,以便服务器可以根据 header设置.