Javascript分类嵌套函数
Javascript sorting out nested functions
所以我有一个脚本,这是一个宾果游戏。一个函数在另一个函数中运行有问题。我们的想法是在.click()函数之外定义checkBingo()函数。有一些ajax在起作用,所以我不确定它在这里是否也起作用。看起来像:
$(document).ready(function(){
function checkBingo() {
$.ajax({
url: '/check-bingo',
type: 'GET',
success: function(data){
return data;
}
}):
}
$('#div').click(function() {
// Some stuff gets done here
$.ajax({
url: '/tile',
type: 'GET',
success: function(data){
// Does some stuff with data, then needs to check if there's a bingo.
var isBingo = checkBingo();
if (isBingo == 'something') {
// Displays something specific on the page.
} else {
// Displays other things on the page.
}
}
}):
});
我被挂起的地方,是isBingo从来没有被分配返回的信息。我认为这可能是因为查询运行得不够快,所以我尝试将变量固定在循环中,直到它获得分配给它的东西,然后控制台告诉我,.click函数内的checkBingo()没有定义。我不确定这是否只是我的一个愚蠢的语法错误,或者我所做的是不可能的。
有人可以验证这确实是可能的,我可能只需要搜索它的语法错误?
因为这一行:
var isBingo = checkBingo();
…正在调用一个函数(checkBingo
),该函数进行异步调用并且不返回任何东西,则isBingo
将是未定义的。
一种方法是通过一个回调函数到checkBingo
,因为JavaScript允许函数像数据一样被传递,当数据从服务器获得时,该函数将被jQuery调用:
function checkBingo(callback) {
$.ajax({
url: '/check-bingo',
type: 'GET',
success: function(data){
callback(data);
}
// or you could just do:
// success: callback,
});
}
// ....
success: function(data){
checkBingo(function (isBingo) {
if (isBingo == 'something') {
// Displays something specific on the page.
} else {
// Displays other things on the page.
}
});
另一种方法,其中将允许您继续使用您的同步风格(即,在checkBingo
可以返回的东西,你可以立即使用它),即使代码不同步执行是通过利用事实,jQuery的Ajax API的后期版本返回一个承诺对象,允许这种风格的编码:
$(document).ready(function(){
function checkBingo() {
return $.ajax({
url: '/check-bingo.txt',
type: 'GET'
});
}
$('#div').click(function() {
// Some stuff gets done here
$.ajax({
url: '/tile.txt',
type: 'GET',
success: function(data){
var checkingBingo = checkBingo();
checkingBingo.done(function (isBingo) {
if (isBingo == 'something') {
alert('a');
// Displays something specific on the page.
} else {
alert('b');
// Displays other things on the page.
}
});
}
});
});
});
除了需要将几个冒号转换为分号,并在"#div"代码前面添加jQuery $
之外,还有两个方面需要注意:
- 我在Ajax调用中添加了"。txt"扩展名,以防扩展名仅仅隐藏在您的系统中。
- 代码
$('#div')
假定页面上有一个ID设置为"div"的元素。如果你想让所有的div
元素都是可点击的,你只需要做$('div')
。
相关文章:
- 用嵌套函数和默认函数定义函数
- d3中堆栈函数和嵌套函数之间的差异
- JavaScript 中的嵌套函数和 “this” 关键字
- 嵌套到另一个函数中的Fancybox函数;不起作用
- Javascript中带有返回值的嵌套函数
- 访问嵌套函数结构中的JavaScript父函数变量
- 从嵌套函数访问函数属性
- 如何在javascript中使用嵌套函数作为生成器(使用“inner”yields)
- Javascript嵌套函数属性继承
- 具有嵌套对象数组的 Javascript 对象的递归搜索函数
- Facebook Javascript 函数嵌套循环
- 将动态 AJAX 函数嵌套在 JavaScript 函数中 - 并保持更新
- 对由多个groupBy函数嵌套的对象数组进行分组
- 从父函数返回什么以获取从子函数/嵌套函数返回的值
- jQuery匿名函数-嵌套函数
- ajax调用函数嵌套
- 函数嵌套括号的Python风格指南是什么?
- setTimeout函数中的关键字,该函数嵌套在on()方法下.但这并没有奏效
- 嵌套异步函数嵌套同步函数
- 如何克服函数嵌套