循环函数不起作用
Loop in function not working
我在循环时遇到了这个小麻烦,我总是得到相同的"y"值(5(,它不会减少或增加。我想要的是重复 ajax 调用 X 次 [all],并通过匿名函数传递响应和当前呼叫号码。我希望你能帮助我。
function _shds(long, count, func) {
for (var y = 0; y < count; y++) {
gapi.client.load('urlshortener', 'v1', function() {
var request = gapi.client.urlshortener.url.insert({
'resource': {
'longUrl': long
}
});
var resp = request.execute(function(resp) {
func(resp.id, y);
});
});
}
}
var total = 3;
var base = "soem";
var lista = ["1", "2", "3", "4", "5"];
_shds("222", total, function(data, y) {
if (data != "undefined") {
newbase = base.replace("soem", data);
console.log(lista[y].uid + newbase + " pos:" + y);
}
});
更新:抱歉,这是代码的示例:http://jsfiddle.net/ZgXZB/
这是一个比它第一次出现更棘手的问题,也是一个常见的JavaScript问题。这是怎么回事,当你说:
for (var y = 0; y < count; y++) {
gapi.client.load('urlshortener', 'v1', function() {
var request = gapi.client.urlshortener.url.insert({
'resource': {
'longUrl': long
}
});
var resp = request.execute(function(resp) {
func(resp.id, y);
});
});
}
您正在传递给 get
的函数回调中对y
创建闭包。但是,您只创建了一个闭包,它的最终值为 y
count
。您要做的是创建count
不同的闭包,因此您需要引入一个新作用域:
for (var y = 0; y < count; y++) {
(function (y){
gapi.client.load('urlshortener', 'v1', function() {
var request = gapi.client.urlshortener.url.insert({
'resource': {
'longUrl': longurl
}
});
var resp = request.execute(function(resp) {
func(resp.id, y);
});
});
})(y);
}
我认为应该这样做。您需要声明一个新函数以在 JavaScript 中创建新作用域,通过将y
作为参数传递给该函数,您将为每个值创建一个新的闭包 y
。
问题是您试图在回调返回后(即在 for 循环完成后(获取 i
的值。您需要做的是在首次构造$.get
的中间回调时bind
要传递给回调i
的值:
function _short(longurl, count, func) {
for (var y = 0; y < count; y++) {
gapi.client.load('urlshortener', 'v1', function() {
var request = gapi.client.urlshortener.url.insert({
'resource': {
'longUrl': longurl
}
});
var resp = request.execute((function(y, resp) {
func(resp.id, y);
}).bind(this, y));
});
}
}
var totalchat = 10;
var base = "soem";
var listachat = ["1", "2", "3", "4", "5"];
_short("222", 3, function(data, y) {
if (data != "undefined") {
newbase = base.replace("soem", data);
console.log(listachat[y].uid + newbase + " pos:" + y);
}
});
bind
所做的是创建一个新函数,其中 this
的值绑定到第一个参数(我刚刚设置为 this
(,所有剩余的参数都绑定到函数的第一个参数,而它返回的函数采用一组新的参数(在这种情况下,原始函数只剩下data
参数, 匹配 $.get
的回调签名(。
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- Ember Data DS.Model's set函数不起作用
- Javascript:If-then语句在函数中不起作用
- JavaScript链接在点击时不起作用;函数在页面加载时工作
- AngularJS指令部分应用的函数don'不起作用
- 为什么我的JavaScript堆栈排序函数不起作用
- 嵌套到另一个函数中的Fancybox函数;不起作用
- Javascript onchange()函数不起作用
- I'我试图在文本区域中进行特定的输入,调用特定的javascript函数,但没有成功;不起作用
- javascript函数调用不起作用
- 另一个Ajax函数触发的Ajax函数不起作用
- 从PHP调用JS函数不起作用
- 清除函数中if语句内部不起作用的间隔
- js函数堆栈传入变量,.hide()不起作用
- jQuery validate函数不起作用
- jQuery克隆函数在chrome中不起作用
- JS-窗口宽度函数不起作用
- 函数调用不起作用
- .hasClass 在 onclick 函数中不起作用,但删除和添加类函数可以
- javascript函数,该函数不起作用,但不会显示任何错误