2016-08-01 74 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); 
相關問題