描述从回调方法获取正确的作用域

Coffeescript getting proper scope from callback method

本文关键字:作用域 获取 回调 方法 描述      更新时间:2023-09-26

我已经搜索过了,似乎找不到成功的答案,我使用的是jQuery ajax调用,无法获得对回调的响应。

这是我的咖啡脚本代码:

initialize: (@blog, @posts) ->
    _url = @blog.url
    _simpleName = _url.substr 7, _url.length
    _avatarURL = exports.tumblrURL + _simpleName + 'avatar/128'
    $.ajax
        url: _avatarURL
        dataType: "jsonp"
        jsonp: "jsonp"
        (data, status) => handleData(data)
handleData: (data) =>
    console.log data
    @avatar = data

以下是已编译的JS:

  Blog.prototype.initialize = function(blog, posts) {
    var _avatarURL, _simpleName, _url,
      _this = this;
    this.blog = blog;
    this.posts = posts;
    _url = this.blog.url;
    _simpleName = _url.substr(7, _url.length);
    _avatarURL = exports.tumblrURL + _simpleName + 'avatar/128';
    return $.ajax({
      url: _avatarURL,
      dataType: "jsonp",
      jsonp: "jsonp"
    }, function(data, status) {
      return handleData(data);
    });
  };
  Blog.prototype.handleData = function(data) {
    console.log(data);
    return this.avatar = data;
  };

我试了十几种变体,但我不知道该怎么写?

谢谢。

您的参数不正确,您将回调作为第二个参数传递给$.ajax。您应该在选项中将其作为success:传递,或者将其添加到Ajax延迟对象中。

由于handleData看起来像是附加到一个对象上,该对象很可能是this,因此需要在它前面加上@

虽然传递URL的方式有效,但API现在建议将URL作为第一个参数传递,将选项作为第二个参数传递。

$.ajax _avatarURL,
  dataType: "jsonp"
  jsonp: "jsonp"
  success: (data, status) => @handleData(data)

$.ajax _avatarURL,
  dataType: "jsonp"
  jsonp: "jsonp"
.done (data) => @handleData(data)

由于handleDataBlog的原型中,而不是作用域中的变量,因此您可能需要以下内容:

(data, status) => @handleData(data)