我正在尝试通过jQuery AJAX调用预加载一些图像,但是在将(url)字符串传递到AJAX调用的成功函数内的函数时遇到了实际问题(如果有意义)。
这是我的代码,原样:
//preloader for images on gallery pages
window.onload = function() {
setTimeout(function() {
var urls = ["./img/party/"]; //just one to get started
for ( var i = 0; i < urls.length; i++ ) {
$.ajax({
url: urls[i],
success: function(data,url) {
$(data).find("a:contains(.jpg)").each(function(url) {
new Image().src = url + $(this).attr("href");
});
}
});
};
}, 1000);
};
可以看到我(失败的)尝试将url传递到.each()
调用中-
url
最终得到了递增整数的值。不确定为什么或与这些东西有什么关系,也许是jpg文件的数量?
…无论如何,它当然应该在我原始的urls数组中使用单个值。
感谢您的帮助-我似乎总是对这些回调有点不满意。
程序?
所以,我有点混了,听了@ron tornambe和@PiSquared的评论,目前在这里:
//preloader for images on gallery pages
window.onload = function() {
var urls = ["./img/party/","./img/wedding/","./img/wedding/tree/"];
setTimeout(function() {
for ( var i = 0; i < urls.length; i++ ) {
$.ajax({
url: urls[i],
success: function(data) {
image_link(data,i);
function image_link(data, i) {
$(data).find("a:contains(.jpg)").each(function(){
console.log(i);
new Image().src = urls[i] + $(this).attr("href");
});
}
}
});
};
}, 1000);
};
我尝试将image_link(data, i)
here
放在任何地方(在每个嵌套函数等中),但得到的结果是相同的:for的值i
只记录为3。我怀疑这是因为所有引用都i
指向同一个事物并且由时间异步任务实际获取到image_link(data, i)
的for...
循环是完全断绝了(因此具有值为3)。不用说这给出urls[i]
了“未定义”。
还有(更多)技巧可以解决这个问题吗?
由于设置对象与该ajax调用相关联,因此您可以简单地将索引器添加为自定义属性,然后可以this
在成功回调中使用以下属性进行访问:
//preloader for images on gallery pages
window.onload = function() {
var urls = ["./img/party/","./img/wedding/","./img/wedding/tree/"];
setTimeout(function() {
for ( var i = 0; i < urls.length; i++ ) {
$.ajax({
url: urls[i],
indexValue: i,
success: function(data) {
image_link(data , this.indexValue);
function image_link(data, i) {
$(data).find("a:contains(.jpg)").each(function(){
console.log(i);
new Image().src = urls[i] + $(this).attr("href");
});
}
}
});
};
}, 1000);
};
编辑:
添加了一个更新的JSFiddle示例,因为他们似乎已经更改了其ECHO端点的工作方式:https
://jsfiddle.net/djujx97n/26/ 。
要了解其工作原理,请参见ajaxSettings对象上的“
context”字段:http
://api.jquery.com/jquery.ajax/ ,特别是以下注意事项:
“
this
所有回调中的引用是context选项中设置中传递给$ .ajax的对象;如果未指定context,则是对Ajax设置本身的引用。”
问题内容: 与Firebase问题相比,这更像是JavaScript关闭问题。在以下代码中,Firebase回调无法识别父作用域中的变量myArr。 问题答案: 回调函数可以很好地识别/修改。问题是,当执行标记为“不工作”的标签时,回调尚未触发。 让我们稍微更改一下代码: 现在,可能会更容易了解发生了什么。 您注册一个侦听器,该侦听器将调用添加到Firebase中的每个帖子 这将导致对服务器的调用
我正在尝试设置一个“事件接收器”类,将GLFW回调封装到用户可以从中继承的类中,但在将基类成员函数传递到GLFW“set callback”函数中时遇到问题。 这本质上提供了一个带有纯虚拟函数的基类,供用户继承和重写,以便在事件发生时提供自己的逻辑。用户定义的子类将被传递到更大的“应用程序框架”类中,该类将进行必要的调用以设置GLFW回调函数。 当然,您不能将成员函数作为函数参数传递,因为您必须提
问题内容: 很多人说评论中的要求太多,这让我犹豫不决,但是我仍然没有在他们的答案中找到解决方案,主要是因为(1)他们通常使用jQuery,而(2)问题通常包含我不理解的技术。 我有一个函数,里面有一个变量。变量被分配了一个功能。我敢肯定,这个概念不是AJAX独有的,但这是我正在使用的上下文(如果有区别的话)。 我想将变量传递给函数。但是,由于没有原始函数声明,如何指定参数?我能做到吗? 问题答案:
问题内容: 在我的AngularJS应用程序中,我正在执行以下操作 现在,我需要访问成功回调中的值,即,我需要知道在发出请求时它具有哪个值。 有什么“最佳实践”怎么做? PS:我可以执行以下操作,但是有更好的方法吗? 问题答案: 解决方案1: 解决方案2(根据Jim Hong的回答更新):
问题内容: 我试图将回调函数从控制器传递给指令。 这是回调函数代码: 指令用法: 指令代码: 模板中的回调用法: 但是,这给了我以下错误: 我看过很多类似的问题,但不明白我在哪里错了。 问题答案: 从指令中调用表达式方法时,您需要以格式传递指令中的参数,还应更正指令属性值以像 指令用法: 指令模板
问题内容: 我正在使用$ .ajax将数据发布到服务器。但是,我想向“成功”回调传递一个附加参数,以告知回调函数响应所针对的HTML元素的ID。 有可能的?喜欢: 问题答案: 通过在与局部变量相同的作用域中声明函数文字,该函数将成为可以访问该局部变量的 闭包 。(或者有人会说,只有当函数文字也引用了未在其范围内定义的非全局变量时,它才成为 闭包 。