从嵌套的jquery-ajax-get请求返回数据
return data from nested jquery ajax get request
我有两个JAVASCRIPT API Get调用,我正在使用JQUERY进行。我想将在第二次调用中构建的HTML附加到DOM中。
第一个调用获取一些数据。我循环浏览这些数据的长度,对每个索引进行第二次调用。
在第二次调用中,我构建了HTMLContent。
完成所有调用后,我将HTMLContent附加到DOM中。
我很难在第一次调用中返回HTMContent,因为我只想在DOM完全构建好后追加它。在我创建的for
循环之外执行AND。
我知道我可以在第二次通话中附加完成的内容,但我真的很想知道如何返回。
我想也许我需要创建一个promise,但不确定这是否有帮助,因为范围仍然包含在第二个get请求.done
func 中
这就是我到目前为止所拥有的。
var gallery = (function($){
var init,
firstGetCall,
secondGetCall,
HTMLContent = '';
init = function(){
// Make first call
firstGETCall();
};
// Declare firstGETCall func
firstGETCall = function(){
$.ajax({
url: 'http://example.com/data.json',
type: 'GET',
data: {
numberOfItems: 10
}
})
.done(function(data) {
// Cycle through each data element
for (var i = 0; i < data.length; i++) {
// Make second call
secondGetCall(data[i]);
};
})
.fail(function(error) {
console.log(error);
});
// I want to append the DOM here with the conplete HTMLContent - built up of 10 x <div><img... elements
// However I'm stuck as to how to return the complete HTMLContent
};
// Declare secondGetCall func
secondGetCall = function(singleData) {
$.ajax({
url: 'http://example.com/data-2.json',
type: 'GET',
data: {
type: singleData
}
})
.done(function(data) {
// Build HTMLContent
HTMLContent = '<div><img src="' + data.image + ' title="' + data.subTitle + ' alt="Photo"></div>';
// I do not want to append the DOM here
// return HTMLContent doesn't work
})
.fail(function(error) {
console.log(error);
});
};
return {
init: init
};
})(jQuery);
gallery.init(jQuery);
首先最重要的一点:
我想在这里附加DOM。。。
不管怎样,在你发表上述评论的地方你什么都做不了
由于Ajax是异步工作的(除非您指定相反的语句,但强烈建议您这样做(,所以在$.ajax
启动后几微秒,即在构建整个HTML之前很长一段时间,您指定的位置的任何语句都将被执行。
现在这似乎也很奇怪:
我很难在第一次呼叫时将HTMContent返回
首先是因为,同样由于异步模式,您不能期望从Ajax调用的.done()
返回任何内容
但也因为我不明白你为什么要"返回"一个已经在更高级别可用的数据。事实上,你只需要在它可用时得到通知。
另一方面,我完全同意最好只向DOM添加一次HTML,以减少时间消耗。
然后,为了实现这一点,我的第一个想法是:为什么不简单地拥有一个唯一的服务器功能,返回所需的整套数据,而不是两个不同的数据
然而,如果由于某种原因确实不可能,您可能会让Ajax调用同步工作(但您应该再次避免(
在这种情况下,您必须:
- 在
secondGetCall()
函数中,稍微修改.done()
主体语句,将新数据附加到HTMLContent
,而不仅仅是设置它:HTMLContent += '<div>...</div>'
- 在两个Ajax调用中的每一个调用中,都将
async: false
添加到Ajax对象中 - 编写一条语句,将HTMLContent附加到DOM中您编写注释的位置
- AJAX调用并在Node中获取返回数据
- 角度服务未返回数据
- 统计ajax返回数据中的html元素
- 有没有更好的方法可以测量从Ajax调用返回数据所需的总时间
- Imgur API图像搜索未返回数据
- javascript对象显示为null,但object.properties返回数据
- 如何从ajax调用JQuery返回数据
- 试图从嵌套的回调函数返回数据
- NodeJS FS 不从多个文件返回数据
- ajax函数未在C#中返回数据
- 如何在公共js模块中从web服务返回数据
- 将字符串与 JSON 对象组合以返回数据
- 嵌套异步函数未及时返回数据的问题
- NodeJS JSONStream 以一个长字符串的形式返回数据
- 如何使用 HTML 图像请求将数据发送到服务器,或返回数据作为响应
- 从 Angular 模态服务中的模态主体模板返回数据
- jQuery 每个循环返回数据两次
- $.getJSON 在返回数据后不会运行函数
- 如何访问返回数据中的特定json值
- 工厂返回数据后未设置角度$scope