2016-08-01 13 views
0

Ich baue diesen Code zu calla Web-Service nutzen. Jetzt möchte ich, dass diese Methode ein Objekt zurückgibt.Wie Callback-Funktion in Javascript

Das ist also der Befehl, der die Methode aufrufen:

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

Dies ist die Methode, die Web-Service-Aufruf:

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

} 

Das Problem ist auf der Callback-Funktion. Weil die Methode getDocument den Web-Service korrekt aufruft und ein korrektes obj hat, aber die Callback-Funktion nicht aufgerufen wird.

+0

der Rückruf das ist Onload-Funktion –

+0

@ oliv37 - Das ist nicht der Callback, nach dem das OP fragt. – Quentin

Antwort

2

Sie benötigen ein drittes Argument Ihre getDocument Funktion

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

} 

Dann (es wird die Callback-Funktion Ihres xhr Anfrage sein) Sie getDocument Funktion aufrufen können, wie Sie vor

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

Darüber hinaus ist es immer ratsam, zu überprüfen, ob Ihr Rückruf wie so in der Tat eine Funktion ist: 'if (Erfolg && typeof Erfolg ===‚Funktion‘) {Erfolg (obj)}' –

1

Sie behandeln sie wie jede andere Funktion und jedes andere Argument.

Sie es als drittes Argument an getDocument sind vorbei, aber Sie haben es nicht einen Namen in dieser Funktion geben:

function getDocument(fiscalCode, date){ 

sollte sein:

function getDocument(fiscalCode, date, callback) { 

Dann Sie müssen es nur nennen:

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