Why does my jQuery getJSON call (within Office.js (Excel js add-in)) return an error?

不打扰是莪最后的温柔 提交于 2021-01-28 08:16:27

问题


This javascript within an Office js add-in always fails when making a get request:

function update() {
    Excel.run(function (ctx) {

        return ctx.sync()
            .then(function () {

                var company = $('#company').val();
                var environment = $('#environment').val();
                var apiUrl = "https://localhost:44321/api/Country";
                var params = "company=" + company + "&environment=" + environment;

                $.getJSON(apiUrl, params)
                    .done(function (result) {
                        showNotification(result.length);
                    })
                    .fail(function (xhr, status, error) {
                        //showNotification(error.statusText);
                        showNotification(error.length);
                    });
            });
    }).catch(function (error) {
        showNotification(error);
    });
}

I can see the json being returned successfully within Fiddler and JSONLint says the json is valid. Here it is:

[{"country":"UK","countryLongName":"United Kingdom","currency":"GBP"}]

I'm running on localhost with https, and have the following AppDomains in my manifest (belt and braces):

<AppDomain>https://localhost:44321/api/Country</AppDomain>
<AppDomain>https://localhost:44321</AppDomain>
<AppDomain>https://localhost</AppDomain>

However, getJSON.fail() is always invoked, with the following parameters:

  • xhr.responseJSON: undefined
  • xhr.statusText: "error"
  • status: "error"
  • error: ""

Why does getJSON always fail?

Further edit I've tried this js instead...

                $.ajax({
                    url: apiUrl,
                    dataType: 'json',
                    async: false,
                    data: params,
                    success: function (data) {
                        showNotification(data);
                    },
                    error: function (msg) {
                        showNotification('error : ' + msg.d);
                    }
                });

...and now the error function is being invoked with the following parameters:

  • msg.responseJSON: undefined
  • msg.status: 0
  • msg.statusText: "NetworkError"

回答1:


It's all to do with CORS, I found the solution in rick-strahl's post:

https://weblog.west-wind.com/posts/2016/Sep/26/ASPNET-Core-and-CORS-Gotchas#ApplythePolicy

Specifically, "UseCors() has to be called before UseMvc() Make sure you declare the CORS functionality before MVC so the middleware fires before the MVC pipeline gets control and terminates the request."



来源:https://stackoverflow.com/questions/49260161/why-does-my-jquery-getjson-call-within-office-js-excel-js-add-in-return-an-e

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!