如何在javascript中使用回调函数

时间:2016-08-01 07:43:44

标签: javascript web-services

我将此代码构建到calla Web服务。 现在我希望这个方法返回一个对象。

所以这是调用方法的命令:

Titanium.API.info("CHIAMO IL WS CON DATA NULL");
getDocument("CFDECTEST02",null, function(obj) {
   Titanium.API.info("CALL BACK CHIAMATA "+ obj);
});

这是调用Web服务的方法:

function getDocument(fiscalCode, date){
    var obj;
    var xhr = Titanium.Network.createHTTPClient();
    xhr.setTimeout(10000);
    xhr.open('POST', "http://url");

    xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    var myObject = {
         cf :fiscalCode,
         date_last_synchronization :date 
    };
    xhr.send(JSON.stringify(myObject));

    xhr.onerror = function() {
        Ti.API.info("SERVIZIO IN ERRORE");
        Ti.API.info(this.responseText);
        disattivaSemaforo();
    };
   xhr.onload = function() {
        var obj = JSON.parse(this.responseText);
        Ti.API.info(this.responseText);
        return obj;
    };

}

问题在于回调函数。因为方法getDocument正确调用了Web服务并且具有正确的obj,但是没有调用回调函数。

2 个答案:

答案 0 :(得分:2)

你的getDocument函数需要第三个参数(它将是xhr请求的回调函数)

function getDocument(fiscalCode, date, success){
 var obj;
 var xhr = Titanium.Network.createHTTPClient();
 xhr.setTimeout(10000);
 xhr.open('POST', "http://url");

 xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");
 var myObject = {
     cf :fiscalCode,
     date_last_synchronization :date 
 };
 xhr.send(JSON.stringify(myObject));

  xhr.onerror = function() {
    Ti.API.info("SERVIZIO IN ERRORE");
    Ti.API.info(this.responseText);
    disattivaSemaforo();
 };


 xhr.onload = xhr.onload = function() {
    var obj = JSON.parse(this.responseText);
    Ti.API.info(this.responseText);
    success(obj);
 };

}

然后你可以像之前那样调用getDocument函数

getDocument("CFDECTEST02",null, function(obj) {
  Titanium.API.info("CALL BACK CHIAMATA "+ obj);
});

答案 1 :(得分:1)

您将其视为任何其他函数和任何其他参数。

您将它作为第三个参数传递给getDocument,但您还没有在该函数中为其命名:

function getDocument(fiscalCode, date){

应该是:

function getDocument(fiscalCode, date, callback) {

然后你只需要打电话:

var obj = JSON.parse(this.responseText);
callback(obj);