Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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 如何在flux中设置ajax数据获取?_Javascript_Reactjs_Reactjs Flux_Flux - Fatal编程技术网

Javascript 如何在flux中设置ajax数据获取?

Javascript 如何在flux中设置ajax数据获取?,javascript,reactjs,reactjs-flux,flux,Javascript,Reactjs,Reactjs Flux,Flux,我正在开发我的第一个FLUX应用程序,偶然发现了这个问题。我想从服务器获取数据并将其传递给我的组件 假设我有一个组件方法 loadMore() { AppActions.getCards(); } 。。。和一家商店: $.ajax({ url: '../data.json', dataType: "json", success: function (data) { // ??? }.bind(this), error: function (xhr, status

我正在开发我的第一个FLUX应用程序,偶然发现了这个问题。我想从服务器获取数据并将其传递给我的组件

假设我有一个组件方法

loadMore() {
  AppActions.getCards();
}
。。。和一家商店:

$.ajax({
  url: '../data.json',
  dataType: "json",
  success: function (data) {
    // ???
  }.bind(this),
  error: function (xhr, status, err) {
    console.error(status, err.toString());
  }.bind(this)
});
不太清楚如何正确地做。 在ajax
中,这个
显然是
未定义的
,也不能从中返回值,或者我可以吗


非常确定这是一件小事,但如果您能给我一个建议,我将非常感激。

在操作处理程序中执行它。因此,流程将是:

  • 组件调用操作
  • 操作处理程序将检索数据
  • 一旦数据到达,操作将发送一个事件,通知数据
  • 正在侦听事件的存储将接收数据
  • 存储将发出更改事件
  • 依赖于该存储的组件将更新
在操作处理程序中,您可以分派开始加载数据的事件,以便更新存储状态和UI

Fluxible对此解释得非常清楚:

根据需要,您可以执行以下操作:

从组件触发视图操作

loadMore() {
    AppViewActionCreators.getCards();
}
在AppViewActionCreator中,调用AppWebAputils方法

getCards() {
    AppWebAPIUtils.getCards();
}
在AppWebaputils中进行ajax调用

getCards() {
    $.ajax({
        url: '../data.json',
        dataType: "json",
        success: function (data) {
            AppServerActionCreators.recieveCards(data);
        },
        error: function (xhr, status, err) {
            console.error(status, err.toString());
        }
    });
}
成功后,在ServerActionCreators中触发服务器操作,并发送包含数据的事件

recieveCards(data) {
    AppDispatcher.dispatch({
        type: ActionTypes.RECIEVE_CARDS,
        data: data
    });
}
通过存储和发出更改事件接收数据

AppStore.dispatchToken = AppDispatcher.register(function (action) {
    switch (action.type) {
        case ActionTypes.RECIEVE_CARDS:
            _cards = action.data.cards;
            AppStore.emitChange();

            break;
    }
});

您应该有视图和服务器操作创建者来防止循环依赖。

可能重复感谢您,Cory,但我发现这个答案对于我的案例来说有点过时。也许有什么捷径?这个流程很清楚。我的问题归结为-如何将卡传递回组件?请仔细阅读此内容。尤其地它展示了如何使您的组件自动获取数据。谢谢Alexey,这确实很有帮助!