我无法绕过javascript闭包。我想要4个随机数,但只得到最后一个重复4次。
的Javascript
$(function() {
function setNewNumber(element) {
return function (newNumber) {
element.text(newNumber);
}
}
$('.number').each(function() {
$.get('http://www.random.org/integers/?num=1&min=1&max=6&col=1&base=10&format=plain&rnd=new',
setNewNumber($(this))
);
});
});
HTML
<div class="number"></div>
<div class="number"></div>
<div class="number"></div>
<div class="number"></div>
任何提示?
答案 0 :(得分:4)
正在缓存get
请求。
(也就是说你对闭包的理解是正确的,代码工作正常)。
来自评论,因为这是相关的:
您可以根据其API在同一个计时器上从random.org请求多个号码。而不是使用四个请求,使用
num=' + $(".number").length
然后进行一些解析
答案 1 :(得分:0)
使用您的顶级功能尝试实现的目标有点令人困惑。如果您只想将新的随机数设置为元素,则不需要其中任何一个。
使用ajax
为您的请求指定一些参数。特别是,您希望停止缓存您的请求。您还可以提供上下文来引用您的.number
元素。
$('.number').each(function() {
$.ajax({
type: "GET",
url: 'http://www.random.org/integers/?num=1&min=1&max=6&col=1&base=10&format=plain&rnd=new',
context: this,
success: function(data) {
$(this).text(data);
},
cache: false
});
});
此解决方案摆弄here.
答案 2 :(得分:-1)
作品:http://plnkr.co/edit/XTOI20kGbFbzdtDaqpLZ
您的请求正在缓存中。顺便说一句,在循环中获取数据 - 这不是一个好主意。
答案 3 :(得分:-1)
任何jquery ajax请求(如$ .get)都会更改范围。如果要重用setNewWord函数,则需要在get的结果中全局作用域或作用域。
看看jsfiddle。 http://jsfiddle.net/justengland/hJnXb/2/
function setNewWord(element) {
$('#output').append(element + '<br>');
}
$(function(){
$(numbers).each(function () {
var url = 'http://www.random.org/integers/?num=1&min=1&max=6&col=1&base=10&format=plain&rnd=new';
$.get(url, setNewWord);
});
});