Reactjs 在本例中,如何从asp.net web api获取数据

Reactjs 在本例中,如何从asp.net web api获取数据,reactjs,reactjs-flux,refluxjs,Reactjs,Reactjs Flux,Refluxjs,我用的是reactjs的回流液。从Store的回流操作中,我写了一个从asp.net web api获取数据的操作,我认为这是获取使用ajax的数据的唯一方法,有人跟我说,我可以使用插件jquery获取数据,但我不相信,因为$.ajax是最好的方法。我在谷歌上搜索了所有东西,但我看不出有什么解决办法。如果你知道一些需要解决的问题,请与我分享,我真的非常感谢 此外,我对ajax的全局变量和局部变量有问题。请查看我的代码,您可以看到粗体文本永远不会返回值,问题仍然存在于成功块中,列表变量在块外时不会

我用的是reactjs的回流液。从Store的回流操作中,我写了一个从asp.net web api获取数据的操作,我认为这是获取使用ajax的数据的唯一方法,有人跟我说,我可以使用插件jquery获取数据,但我不相信,因为$.ajax是最好的方法。我在谷歌上搜索了所有东西,但我看不出有什么解决办法。如果你知道一些需要解决的问题,请与我分享,我真的非常感谢

此外,我对ajax的全局变量和局部变量有问题。请查看我的代码,您可以看到粗体文本永远不会返回值,问题仍然存在于成功块中,列表变量在块外时不会更新。有什么问题吗?我怎样才能纠正这个错误

再次非常感谢您

(function (Reflux, WorkHistoryActions, global) {

    global.workhistoryStore = Reflux.createStore({

        listenables: [WorkHistoryActions],

        init: function () {
            this.storyArr = [];
        },

        getItems: function (resume_id) {
            console.log(resume_id)
            **var list = [];**
            $.ajax({
                type: "get",
                url: global.getHost() + "/api/workhistories/6969607988340821009",
                dataType: 'json',
                crossDomain: true,
                success: function (data) {

                    $.each(data, function (i, v) {
                        **list.push(v);**
                    })

                }
            });
            **return list;**
        },
})

我不知道如何在回流中进行,但在正常流量架构中,您希望这样做:

    getItems: function (resume_id) {
        $.ajax({
            type: "get",
            url: global.getHost() + "/api/workhistories/6969607988340821009",
            dataType: 'json',
            crossDomain: true,
            success: function(result) {
                workHistoryActionCreator.receiveItems(result);
            },
            error: function(error) {
                workHistoryActionCreator.failToReceiveItems(error);
            }
        });
    }

存储向调度程序注册接收到的\u工作\u历史\u项和接收失败的\u工作\u历史\u项的操作,设置其数据,然后触发更改事件。

JavaScript是一个事件驱动系统,其中AJAX请求也是异步的,服务器的响应也是异步接收的

使用
async:false
是一种不好的做法,因为它会冻结应用程序并阻止任何并行执行

因此,使用
async:true
(默认设置),您不能调用进行AJAX调用并返回响应的函数

解决方案#1:回调(老派) 修改
getItems
函数以接收另一个参数,该参数是回调函数,当您从服务器收到响应时,调用该回调函数并将
list
作为参数传递给该函数调用

例子 如何使用?
解决方案2:JavaScript承诺(推荐) 返回并使用
then()
函数设置回调。我用

例子 如何使用?
@JimmyMac这几乎会使您的应用程序无法使用,您在开发时可能不会注意到任何东西,因为响应是即时的,但在生产过程中,整个选项卡将在请求期间完全冻结。我非常感谢Sanket,这是一个好主意,我将尝试。问题是func(1)和ajax(2)之外的成功块。对于async=true,对于优先级,(2)为第一,(1)为第二。结果是返回空数据。Thnaks!JavaScript在与第三方系统对话时是完全不同的。一切都是通过回访/承诺来完成的。当你移动到Node.js和Mongo时,甚至DB语句都是异步的。我看到nodejs很难接近,我的公司最近转移到nodejs和Mongo到Reactjs和.NET API和Mongo,我觉得很幸运,即使我觉得Reactjs的配置回流很困难,因为它与requirejs有关,我检索了requirejs文档中的所有内容,但没有一步一步地检索。你觉得reactjs和angular怎么样?我正在Toptal写一篇博客文章,这篇文章将于本周发表。标题是:“为什么我要从AngularJS切换到React?”。我会在这里分享链接。太好了,我会读你的帖子,当你完成后与我分享,这里我的电子邮件是“phuochuy”。hcmup@gmail.com". _.
getItems: function(resume_id, callback) {

    $.ajax({
        type: "get",
        url: global.getHost() + "/api/workhistories/6969607988340821009",
        dataType: 'json',
        crossDomain: true,
        success: function (data) {

            var list = [];

            $.each(data, function (i, v) {
                list.push(v);
            })

            callback(list);

        }
    });

    // Return nothing

}
getItem(resume_id, function(list){

});
getItems: function (resume_id) {

    var deferred = Q.defer();

    $.ajax({
        type: "get",
        url: global.getHost() + "/api/workhistories/6969607988340821009",
        dataType: 'json',
        crossDomain: true,
        success: function (data) {

            var list = [];

            $.each(data, function (i, v) {
                list.push(v);
            });

            deferred.resolve(list);


        }
    });

    return deferred.promise;

}
getItem(resume_id).then(function(list){
    // use list
});