【问题标题】:Re-call ajax for update returned data重新调用 ajax 以更新返回的数据
【发布时间】:2016-09-01 11:58:41
【问题描述】:

我已经在一个对象上存储了一个 ajax 调用,以便与 d​​eferred 一起使用

this.favorites = $.ajax({
    url: '/get-favorites',
    type: 'post',
    dataType: 'json'
 });

当我在回调中使用this.favorites.done(myFunction) 时,参数是一个对象,其中包含从数据库中提供的所需数据。如果我更新我的数据库,我需要同时更新来自 ajax 调用的数据,我的想法是重新运行this.favorite,但我还没有找到这样做的方法有人可以帮助我吗? 谢谢!

【问题讨论】:

  • “我的想法是重新运行......”。您似乎正在寻找旧公司的最爱,一个函数!
  • 是的,但是如果在我的函数中我调用this.favorites.done(),那已经是一个函数,我不会收到更新的数据,而是缓存的数据,就像所有延迟对象一样,我的问题是当我想要接收更新的数据而不是缓存的数据
  • 不清楚你在问什么 - 因此投票结束。
  • 我觉得够清楚了,我已经收到了很好的答案!如果您需要更清楚地阅读下面的答案,如果您尝试我的原始解决方案并调用 3 次 this.favorites.done() 您可以看到只执行了一次调用,如果您定义了一个属性,就像答案中建议的那样,并且3 次调用 this.favorites 执行了 3 次 ajax 调用。我不太会用英文写,但我希望你现在能理解这个问题......

标签: jquery ajax asynchronous jquery-deferred


【解决方案1】:

使用函数

this.favorites = $.ajax.bind($, {settings})

this.favorites().then(...)

或定义一个属性

Object.defineProperty(this, 'favorites', {
  get:  $.ajax.bind($, {
      url: '/get-favorites',
      type: 'post',
      dataType: 'json'
   })
})

【讨论】:

  • 谢谢@Yury Tarabanko,但我对最喜欢的定义和你的定义有什么区别?我尝试调用 3 次 favorites.get 函数,但只执行了一次 ajax 调用,因为使用了缓存数据。我找到的解决方案是定义一个更新函数,在该函数中执行另一个 ajax 调用,该调用更新数据库上的数据并返回操作结果和更新后的数据。非常感谢您的建议!
  • “这就是区别”每次访问this.favorites时,我的定义都会调用$.ajax
  • 您的第二个定义返回此错误:Getter must be a function: #<Object>
  • 你确定吗?检查typeof $.ajax.bind($, { url: '/get-favorites', type: 'post', dataType: 'json' }) 它说它是功能。 :)
  • 我的意思是Object.defineProperty(...)返回错误不是$.ajax.bind(...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2019-03-20
  • 2018-06-25
相关资源
最近更新 更多