通过Ajax获取值返回而不调用回调

时间:2014-02-25 06:19:21

标签: javascript jquery coffeescript

我正在使用CoffeeScript构建一个简单的自制JavaScript框架。

在我的模型类中,我有一个fetch方法,如下所示:

fetch : (historyState, callback) ->
  NProgress.start()
  $.get historyState.hash, (data) ->
    (data || data = {})
    data  = JSON.parse data
    if data.success
      return callback data
  .fail (response) ->
    if response.statusText == 'Forbidden'
      window.location.replace '/login'
  .always ->
    NProgress.done()

然后在我的控制器视图方法中,我可以使用它:

view : (id) ->
  state = History.getState()
  model.fetch state, (data) ->
    $('.js-include').html( controller.render 'items/show', data )

这样做的效果还不错,但我想知道如何将多个数据发送到视图?

理想情况如下:

view : (id) ->
  state = History.getState()
  items = model.fetch state
  categories = model.fetch '/api/url/categories'

  $('.js-include').html( controller.render 'items/show', { items : data, categories : categories } )

现在,我无法从fetch方法中获取回调数据,所以我有点卡住了。

1 个答案:

答案 0 :(得分:0)

当你调用$ .get时,jQuery返回 promise ,当服务器响应异步时,jQuery将履行承诺。

如果你想让响应同步,你可以像这样调用jQuery:

response = $.ajax(
  url: "..."
  async: false
).response

以下是AJAX的jQuery文档:https://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings

否则您需要等待,直到您的每个异步请求都已完成。