如何在 FLUX 中处理 ajax 响应

Posted

技术标签:

【中文标题】如何在 FLUX 中处理 ajax 响应【英文标题】:How to handle ajax response in FLUX 【发布时间】:2017-03-10 06:44:57 【问题描述】:

我是 FLUX 的新手,我对如何在 FLUX 中处理 ajax 有疑问。

我的情况如下:

我有文件 commentAPI.js

//all js files are compiled from coffescript

// fetching all comments from server
    _fetchComments: function() 
       var promise;
       promise = $.ajax(
         url: "comments/show",
         type: "GET",
         dataType: "json"
        );
        return promise.then(function(response) 
         // here should be any action ?
        , function(error) 
         return console.log(error);
        );   

然后我有 commentActions.js

   fetchComments: function () 
    allcomments=commentAPI._fetchComments(); 
    return Dispatcher.dispatch(
      actionType: ActionTypes.ALL_COMMENTS,
      comments: allcomments
    );
  

此代码实际上不起作用,因为在 commentActions.js 中调用的函数 _fetchComments 返回整个承诺。

我想做什么: 我想从 ajax 回调函数中获取响应并将结果传递给我的有效负载对象,然后由 Dispatcher 在 中的 _fetchComments() 函数中调度它commentActions.js

最好的方法是什么?如何获得对 ajax 回调函数响应的访问权限?

【问题讨论】:

【参考方案1】:

您应该调度 _fetchComments 函数,并在解决该承诺后,调用操作 fetchComments

在反应代码中,您应该调用异步函数(即 _fetchComments)。

在你的例子中:

// fetching all comments from server
    _fetchComments: function() 
       var promise;
       promise = $.ajax(
         url: "comments/show",
         type: "GET",
         dataType: "json"
        );
        return promise.then(function(response) 
         // put the sync action here
         fetchComments(response)
        , function(error) 
         return console.log(error);
        );   

并且不要忘记将其从操作中移除(即 fetchComments

【讨论】:

如果我理解得很好。 ..我必须在承诺解决的部分代码中调用操作 fetchComments 并假设我知道如何更新我的商店,然后我没有在我的***组件中调用 fetchComments 方法,而是我调用我的异步方法_fetchComments() ? 类似的东西。您必须从组件调度异步操作(_fetchComments),这就是它的调用方式。 See here redux async actions

以上是关于如何在 FLUX 中处理 ajax 响应的主要内容,如果未能解决你的问题,请参考以下文章

如何协调 Flux 和 React 之间的服务器错误消息?

如何协调 Flux 和 React 之间的服务器错误消息?

登录ajax请求Flux React?

在 Flux 中处理 ajax 请求的最佳方式?

如何在 spring web-flux 中发送电子邮件响应式

使用 Flux 时保持 UI 与 ajax 调用同步的惯用方法是啥?