如何在常见的js模块中从Web服务返回数据

时间:2015-03-17 17:53:56

标签: javascript webservice-client titanium-alloy commonjs titanium-modules

我正在使用钛合金编写移动应用程序。我不知道如何编写一个返回对象的模块。我写的版本返回“undefined”。
任何帮助将不胜感激!

这是我如何使用index.js中的模块

    var ResArgs = require("WebData").GetItemDetails(args.barcode, args.type);
    Ti.API.info("Received data from WebGetData: " + ResArgs);

这是实际的WebData.js模块

exports.GetItemDetails = function(code, type) {
    var url = "http://url/" + code + "/" + type;
    var arg = null || {};
    var client = Ti.Network.createHTTPClient({
        // function called when the response data is available
        onload : function(e) {
            Ti.API.info("Received text from service: " + this.responseText);
            return this.responseText;
        },
        // function called when an error occurs, including a timeout
        onerror : function(e) {
            Ti.API.debug(e.error);
            alert('error: ' + e.error);
        },
        timeout : 5000 // in milliseconds
    });
    client.open("GET", url);
    // Send the request.
    client.send();
};

2 个答案:

答案 0 :(得分:0)

查看代码GetItemDetails没有return语句,因此正确返回undefined。由于内部使用的API确实使用了回调,因此无法以显式方式编写代码,而您的GetItemDetails方法可能需要回调作为您在onload或/和{{1}中调用的参数}。

我希望能解释这个问题。

答案 1 :(得分:0)

使用回调

exports.GetItemDetails = function(code, type, _callback) {
  var url = "http://url/" + code + "/" + type;
  var arg = null || {};
  var client = Ti.Network.createHTTPClient({
    // function called when the response data is available
    onload : function(e) {
        Ti.API.info("Received text from service: " + this.responseText);
        _callback && _callback({success : true, data : this.responseText});
    },
    // function called when an error occurs, including a timeout
    onerror : function(e) {
        Ti.API.debug(e.error);
        alert('error: ' + e.error);
        _callback && _callback({success : false, error:e.error});
    },
    timeout : 5000 // in milliseconds
  });
  client.open("GET", url);
  // Send the request.
  client.send();
};

然后你会像这样调用代码

var ResArgs = require("WebData");
ResArgs.GetItemDetails(args.barcode, args.type, function(_response){
  if ( _response.success ) {
     Ti.API.info("Received data from WebGetData: " + _response.data);
  } else {
     Ti.API.error("ERROR from WebGetData: " + _response.error);
  }
});