2016-08-01 4 views
0

Я создаю этот код для веб-службы calla. Теперь я хочу, чтобы этот метод возвращал объект.Как использовать функцию обратного вызова в javascript

Так что это команда, которая вызывается метод:

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

Это метод, который называют веб-сервис:

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 корректно вызывает веб-службу и имеет правильный 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); 
Смежные вопросы