Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何保持父母';AJAX请求期间CoffeeScript中的上下文_Javascript_Jquery_Ajax_Coffeescript_Scope - Fatal编程技术网

Javascript 如何保持父母';AJAX请求期间CoffeeScript中的上下文

Javascript 如何保持父母';AJAX请求期间CoffeeScript中的上下文,javascript,jquery,ajax,coffeescript,scope,Javascript,Jquery,Ajax,Coffeescript,Scope,我想浏览CoffeeScript中的一个对象,并对该对象中的每一项进行AJAX调用(使用jQuery)。在AJAX调用的回调机制中,我想打印导致请求的项的数据,但在回调中,我丢失了对初始上下文的引用。上下文总是相同的: data = one: id: 1 two: id: 2 three: id: 3 four: id: 4 five: id: 5 callback = (data, textStatus, jqXHR) ->

我想浏览CoffeeScript中的一个对象,并对该对象中的每一项进行AJAX调用(使用jQuery)。在AJAX调用的回调机制中,我想打印导致请求的项的数据,但在回调中,我丢失了对初始上下文的引用。上下文总是相同的:

data = 
  one: 
    id: 1
  two:
    id: 2
  three:
    id: 3
  four:
    id: 4
  five:
    id: 5

callback = (data, textStatus, jqXHR) ->    
  console.log value.id # It's always "5" :-(

for key, value of data
  $.get ".", callback

我如何保持上下文?我已经用
粗箭头
尝试了回调,但没有任何帮助。有一个叫做
$.proxy
的东西,但是如何使用它呢?

好的。我用
$.ajax
替换
$.get
,然后使用
上下文
属性解决了这个问题。但是也有咖啡脚本的方法吗?因为我的解决方案依赖于jQuery

data = 
  one: 
    id: 1
  two:
    id: 2
  three:
    id: 3
  four:
    id: 4
  five:
    id: 5

callback = (data, textStatus, jqXHR) ->    
  console.log @id

for key, value of data
  $.ajax
    url: "."
    type: "GET"
    context: @value
  .always(callback) 

您还可以将其包装在即时函数中,并在此上下文中存储变量:

for key, value of data
  (->
    val = value
    callback = (data, textStatus, jqXHR) ->    
      console.log val.id
    $.get ".", callback
  )()
请注意,使用此方法,您必须在调用回调之前首先声明回调

但最可能的“coffeescript方式”是使用do关键字,它会立即调用传递的函数,转发任何参数:

for key, value of data
  do (value)->
    callback = (data, textStatus, jqXHR) ->    
      console.log value.id
    $.get ".", callback

实现这一点的另一种方法是使用jQuery函数进行迭代:

$.each data, (index, value) ->
  callback = (data, textStatus, jqXHR) ->    
    console.log value.id
  $.get ".", callback

这很有帮助。非常感谢。我喜欢使用$。每个