2016-08-01 39 views
0

我正在构建这个代码来调用calla web服务。 现在我想要这个方法返回一个对象。如何在javascript中使用回调函数

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

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,但不调用回调函数。

+0

之前所做的回调是onload函数 –

+0

@ oliv37 - 这不是OP询问的回调。 – Quentin

回答

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); 
}); 
+0

另外,检查你的回调确实是这样一个函数总是一个好习惯:'if(success && typeof success ==='function'){success(obj)}' –

1

你把它当作任何其他函数和任何其他参数来对待。

你是把它当作第三个参数getDocument,但是你有没有给它在该函数的名称:

function getDocument(fiscalCode, date){ 

应该是:

function getDocument(fiscalCode, date, callback) { 

然后你只需要称之为:

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