调用Ajax内部的函数
Call a function inside Ajax
我遇到了一个问题,我无法在以下代码中进行循环:
class ProductsPager
constructor: ->
this.waitformsg()
waitformsg: =>
alert 'begin'
$.ajax
type: "GET"
url: "http://0.0.0.0:3000/live/index.json"
async: true
cache: false
timeout: 1000
success: (data) ->
alert data
error: (XMLHttpRequest, textStatus, errorThrown) ->
alert "end"
waitformsg()setTimeout "waitformsg()", 0
这两个arlert用于调试。它只向我显示每一次中的一次:"开始",紧接在"结束之后,其他都没有
我已经得出结论,最后一行是错误的,我需要找到一种方法来调用Ajax内部的方法
我试过用this.waitformsg()
甚至waitformsg()
替换setTimeout "waitformsg()", 0
,但仍然不起作用。
我想显示无限的"警报",直到收集到成功的合适条件。
这两个:
waitformsg()
setTimeout waitformsg, 0
不会工作,因为作用域中没有waitformsg
函数。
此:
setTimeout "waitformsg()", 0
不会工作,因为没有名为waitformsg
的全局函数,setTimeout
的字符串形式在全局上下文中执行字符串。我建议您忘记setTimeout
甚至有字符串形式。
您应该使用胖箭头(=>
)将回调绑定到当前上下文:
waitformsg: =>
alert 'begin'
$.ajax
#...
error: (XMLHttpRequest, textStatus, errorThrown) =>
alert "end"
@waitformsg()
如果您希望错误处理程序在重试之前等待一秒钟:
setTimeout @waitformsg, 1000
waitformsg
方法将在正确的上下文中运行,因为您将其定义为绑定函数。
我在这里还有几件事:
在CoffeeScript中使用
@
比使用this
更惯用,因此您的构造函数应该是:constructor: -> @waitformsg()
jQuery针对
$.ajax
的async:true
标志已经被弃用,所以你应该停止使用它。async:true
对你的用户来说也是一件令人讨厌的事情(尤其是在循环中),所以你也应该停止使用。
我没有玩过太多CoffeeScript,所以下面是如何在Javascript中做到这一点:
waitformsg: function() {
var self = this;
...
...
error: function(XMLHttpRequest, textStatus, errorThrown) {
self.waitformsg();
};
};
当你简单地呼叫waitformsg()
时,你基本上就是在呼叫window.waitformsg()
。由于这不存在,您的代码就无法工作。您不能使用this
,因为回调是异步的,因此this
的值几乎是调用error
回调时jQuery将其设置为的值(如果它设置了它的话)。因此,您需要维护一个对this
的引用,该引用也会传递到闭包中,您可以通过在函数的本地范围中创建一个新变量并将this
分配给该变量来实现这一点(在本例中,我将该新变量称为self
)。然后您可以拨打self.waitformsg();
。
- 调用函数内部的函数
- javascript函数内部的代码用逗号而不是分号分隔
- javascript无法重新定义函数内部的全局对象
- 如何从函数内部的这个变量中获取值
- appendChild在函数外部工作,但在函数内部不工作
- 在jquery函数内部设置来自jquery函数的var;t运行
- 一个'var'在函数内部声明
- 为什么(如何)'这'从函数内部调用回调时发生更改
- 函数内部未定义的输入值
- 在Meteor中如何将数据从函数内部复制到其他模板
- 如果在构造函数内部为else,则Javascript是可选的
- 我对“;返回true"嵌套函数内部;t工作
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- javascript,将参数传递给函数内部的闭包中的回调
- 匿名自执行js函数内部的全局变量在外部仍然可用
- 使用PHP和Javascript在函数内部传递alphaneumeric值作为参数时出错
- 访问函数内部的Polymer方法
- 更改函数内部的全局变量而不调用它
- 如何在函数内部为jquery工具提示调用不同的var字符串
- 构造函数内部的事件处理