我正在尝试使用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文件的数量?
...anyway,它当然应该接受我的原始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)
放在这里和那里(在每个嵌套函数中,等等)。但是我得到了相同的结果:i
的值只记录为3。我怀疑这是因为所有对i
的引用都指向相同的东西,当异步任务实际到达image_link(data, i)
时,for...
循环已经结束了(因此值为3)。不用说,这会将urls[i]
设置为“未定义”。
有什么(更多)小贴士可以帮我解决这个问题吗?
发布于 2013-12-05 03:25:52
由于设置对象绑定到该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示例,因为它们似乎已经更改了它们的回显端点的工作方式:https://jsfiddle.net/djujx97n/26/。
要了解这是如何工作的,请参阅ajaxSettings对象上的"context“字段:http://api.jquery.com/jquery.ajax/,特别是下面的注释:
“所有回调中的
this
引用是在设置中传递给$.ajax的上下文选项中的对象;如果未指定上下文,则这是对Ajax设置本身的引用。”
发布于 2016-05-24 14:49:35
您还可以使用indexValue属性通过object传递多个参数:
var someData = "hello";
jQuery.ajax({
url: "http://maps.google.com/maps/api/js?v=3",
indexValue: {param1:someData, param2:"Other data 2", param3: "Other data 3"},
dataType: "script"
}).done(function() {
console.log(this.indexValue.param1);
console.log(this.indexValue.param2);
console.log(this.indexValue.param3);
});
发布于 2013-08-24 09:28:20
尝试如下操作(使用this.url获取url):
$.ajax({
url: 'http://www.example.org',
data: {'a':1,'b':2,'c':3},
dataType: 'xml',
complete : function(){
alert(this.url)
},
success: function(xml){
}
});
摘自here
https://stackoverflow.com/questions/18413969
复制相似问题