У меня проблема с тем, что я использую $ .deferred, чтобы получить данные в нужное время, когда моя функция вызвана. Я использовал пример из ответа, который у меня был раньше: Execution Time overlapse while AJAX JSONP Call
Теперь, когда я отлаживаю свой код, мои точки отладки в моей основной функции вызываются первыми, хотя отложенные должны получать данные тем временем. После этого отладчик в $ deferred.done начинает получать мои данные. Насколько хорошо, но данные не возвращаются за время, которое мне понадобится.
Вот список programmaticly из шагов:
- Invoke компонент
- Запуск AJAX вызова (не ждать, пока она это закончено из-за асинхронной JSONP)
- пытается прочитать данные. не определено, потому что вызов еще не закончена
- Возвращает пустую строку
- компонент визуализируется с пустыми данными
- AJAX завершения вызова возвращает данные для функции компонента
- компонент возвращает данные, но ничего не происходит потому что данные уже отправлены и другие компоненты уже оказали
Это пример кода, который я использовал, чтобы попробовать отложенный шаблон:
function getReady() {
var deferredReady = $.Deferred();
$(document).ready(function() {
deferredReady.resolve();
});
return deferredReady.promise();
}
var firstRequest = $.ajax({ url: 'http://www.html5rocks.com/en/tutorials/file/xhr2/' }),
secondRequest = $.ajax({ url: 'http://www.html5rocks.com/en/tutorials/audio/scheduling/' });
$.when(getReady(), firstRequest, secondRequest
).done(function(readyResponse, firstResponse, secondResponse) {
var insertDiv1 = $('<div></div>');
insertDiv1.html($(firstResponse[0]).find('section').html());
var insertDiv2 = $('<div></div>');
insertDiv2.html($(secondResponse[0]).find('section').html());
$('body').append(insertDiv1, '<hr/>', insertDiv2);
});
Это код, который я использовал раньше, но не работаю из-за время/проблемы выполнения:
sap.designstudio.sdk.Component.subclass("component", function() {
var that = this;
this.processDataFromServer = function(){
function getData(callback){
$.ajax({
url: path,
dataType: 'jsonp',
contentType: "application/json",
success: function(data){
callback(data);
}
});
};
getData(processData);
function processData(data){
this.processDataFromServer(data);
};
}
this.mainFunction = function(newValue){
if(typeOf(newValue) == "undefined"{
this.processDataFromServer();
} else {
return newValue;
}
}
}
Теперь я использовал отложенный пример, чтобы получить правильное время для моей основной функции для получения данных и чтобы вернуть его. Но это терпит неудачу. :(
Я не понимаю, в чем проблема? Ваш код, кажется, работает нормально: http://jsfiddle.net/aL5v12mp/. –
Замечание: вся функция 'getReady' кажется немного расточительной (чрезмерная отсрочка). Почему бы просто не поместить код в DOM ready (as за нормаль) и просто беспокоиться о запросах Ajax? –