Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 ASP.NET核心-客户端AJAX不适用于IE11/Edge_Javascript_Ajax_Asp.net Core_Cors_Microsoft Edge - Fatal编程技术网

Javascript ASP.NET核心-客户端AJAX不适用于IE11/Edge

Javascript ASP.NET核心-客户端AJAX不适用于IE11/Edge,javascript,ajax,asp.net-core,cors,microsoft-edge,Javascript,Ajax,Asp.net Core,Cors,Microsoft Edge,我已经花了5天多的时间研究了一个只存在于IE和Edge中的问题(适用于Chrome、FireFox等)。我已经浏览了几乎所有的链接,并尝试了几乎所有的方法,但似乎很多旧帖子的内容/答案都已经过时了 背景:我创建了一个ASP.NET核心web服务-它正在本地主机上的某个端口上运行。理想情况下,我会让我的用户打开一个本地驻留的html文档(意味着驻留在他们的本地文件系统上,而不是托管在服务器上),该文档通过AJAX ping web服务(返回一些JSON)——允许来自web服务的内容显示在html文

我已经花了5天多的时间研究了一个只存在于IE和Edge中的问题(适用于Chrome、FireFox等)。我已经浏览了几乎所有的链接,并尝试了几乎所有的方法,但似乎很多旧帖子的内容/答案都已经过时了

背景:我创建了一个ASP.NET核心web服务-它正在本地主机上的某个端口上运行。理想情况下,我会让我的用户打开一个本地驻留的html文档(意味着驻留在他们的本地文件系统上,而不是托管在服务器上),该文档通过AJAX ping web服务(返回一些JSON)——允许来自web服务的内容显示在html文档中。除了IE和Edge(我使用的是IE11),它在所有浏览器中都能正常工作

这是我的启动。cs:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    ...
    services.AddCors(o => o.AddPolicy("ContentServices", builder =>
    {
        builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
    }));
    services.AddMvc();
    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...
    app.UseCors("ContentServices");
    ...
}
[EnableCors("ContentServices")]
public SearchResponse Query(string index, string input, SearchType searchType, int page = 0, int pageSize = 20)
{
    SearchResponse sr = new SearchResponse;
    ...
    return sr;     
}
function WebService(url, successMsg, errorMsg) {
    return $.ajax({
        url: searchDestinationUrl + url,
        type: "GET",
        crossDomain: true,
        dataType: "json",
        success: function (results) {
            return results;
        },
        error: function (xhr, status, error) {
            console.error(error + " - " + errorMsg);
        }
    });
}

function RunGeneralSearch(input, options) {
        var search = WebService("search/query?index=" + index + "&input=" + input + "&page=" + options.content.pageIndex + "&pageSize=" + options.content.pageSize, "", "Search failed.")
            .then(function (response) {
                var searchResults = [];
                searchResults.content = [];
                searchResults.contentTotal = response.total;
                searchResults.clientPaging = false;

                var results = response.results;
                if (results.length > 0) {
                    var Search = MadCap.CreateNamespace("WebHelp.Search");

                    for (var i = 0; i < results.length; i++) {
                        var result = results[i];
                        var rank = result["rank"];
                        var title = result["title"];
                        var link = result["link"];
                        var linkUrl = GetLinkUrl(link);
                        var abstractText = result["abstractText"];

                        var searchResult = new Search.SearchResult(rank, title, linkUrl.FullPath, unescape(abstractText));
                        searchResults.content.push(searchResult);
                    }
                }

                return searchResults;
            });

        return search;
    };
}
这是我的SearchController。cs:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    ...
    services.AddCors(o => o.AddPolicy("ContentServices", builder =>
    {
        builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
    }));
    services.AddMvc();
    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...
    app.UseCors("ContentServices");
    ...
}
[EnableCors("ContentServices")]
public SearchResponse Query(string index, string input, SearchType searchType, int page = 0, int pageSize = 20)
{
    SearchResponse sr = new SearchResponse;
    ...
    return sr;     
}
function WebService(url, successMsg, errorMsg) {
    return $.ajax({
        url: searchDestinationUrl + url,
        type: "GET",
        crossDomain: true,
        dataType: "json",
        success: function (results) {
            return results;
        },
        error: function (xhr, status, error) {
            console.error(error + " - " + errorMsg);
        }
    });
}

function RunGeneralSearch(input, options) {
        var search = WebService("search/query?index=" + index + "&input=" + input + "&page=" + options.content.pageIndex + "&pageSize=" + options.content.pageSize, "", "Search failed.")
            .then(function (response) {
                var searchResults = [];
                searchResults.content = [];
                searchResults.contentTotal = response.total;
                searchResults.clientPaging = false;

                var results = response.results;
                if (results.length > 0) {
                    var Search = MadCap.CreateNamespace("WebHelp.Search");

                    for (var i = 0; i < results.length; i++) {
                        var result = results[i];
                        var rank = result["rank"];
                        var title = result["title"];
                        var link = result["link"];
                        var linkUrl = GetLinkUrl(link);
                        var abstractText = result["abstractText"];

                        var searchResult = new Search.SearchResult(rank, title, linkUrl.FullPath, unescape(abstractText));
                        searchResults.content.push(searchResult);
                    }
                }

                return searchResults;
            });

        return search;
    };
}
这是我的JavaScript代码:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    ...
    services.AddCors(o => o.AddPolicy("ContentServices", builder =>
    {
        builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
    }));
    services.AddMvc();
    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...
    app.UseCors("ContentServices");
    ...
}
[EnableCors("ContentServices")]
public SearchResponse Query(string index, string input, SearchType searchType, int page = 0, int pageSize = 20)
{
    SearchResponse sr = new SearchResponse;
    ...
    return sr;     
}
function WebService(url, successMsg, errorMsg) {
    return $.ajax({
        url: searchDestinationUrl + url,
        type: "GET",
        crossDomain: true,
        dataType: "json",
        success: function (results) {
            return results;
        },
        error: function (xhr, status, error) {
            console.error(error + " - " + errorMsg);
        }
    });
}

function RunGeneralSearch(input, options) {
        var search = WebService("search/query?index=" + index + "&input=" + input + "&page=" + options.content.pageIndex + "&pageSize=" + options.content.pageSize, "", "Search failed.")
            .then(function (response) {
                var searchResults = [];
                searchResults.content = [];
                searchResults.contentTotal = response.total;
                searchResults.clientPaging = false;

                var results = response.results;
                if (results.length > 0) {
                    var Search = MadCap.CreateNamespace("WebHelp.Search");

                    for (var i = 0; i < results.length; i++) {
                        var result = results[i];
                        var rank = result["rank"];
                        var title = result["title"];
                        var link = result["link"];
                        var linkUrl = GetLinkUrl(link);
                        var abstractText = result["abstractText"];

                        var searchResult = new Search.SearchResult(rank, title, linkUrl.FullPath, unescape(abstractText));
                        searchResults.content.push(searchResult);
                    }
                }

                return searchResults;
            });

        return search;
    };
}
函数WebService(url、successsg、errorMsg){
返回$.ajax({
url:searchDestinationUrl+url,
键入:“获取”,
跨域:是的,
数据类型:“json”,
成功:功能(结果){
返回结果;
},
错误:函数(xhr、状态、错误){
控制台错误(错误+“-”+errorMsg);
}
});
}
函数RunGeneralSearch(输入,选项){
var search=WebService(“搜索/查询?索引=“+index+”&input=“+input+”&page=“+options.content.pageIndex+”&pageSize=“+options.content.pageSize”,”,“搜索失败”)
.然后(功能(响应){
var搜索结果=[];
searchResults.content=[];
searchResults.contentTotal=response.total;
searchResults.clientPaging=false;
var结果=响应结果;
如果(results.length>0){
var Search=MadCap.CreateNamespace(“WebHelp.Search”);
对于(var i=0;i
我尝试过的事情:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    ...
    services.AddCors(o => o.AddPolicy("ContentServices", builder =>
    {
        builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
    }));
    services.AddMvc();
    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...
    app.UseCors("ContentServices");
    ...
}
[EnableCors("ContentServices")]
public SearchResponse Query(string index, string input, SearchType searchType, int page = 0, int pageSize = 20)
{
    SearchResponse sr = new SearchResponse;
    ...
    return sr;     
}
function WebService(url, successMsg, errorMsg) {
    return $.ajax({
        url: searchDestinationUrl + url,
        type: "GET",
        crossDomain: true,
        dataType: "json",
        success: function (results) {
            return results;
        },
        error: function (xhr, status, error) {
            console.error(error + " - " + errorMsg);
        }
    });
}

function RunGeneralSearch(input, options) {
        var search = WebService("search/query?index=" + index + "&input=" + input + "&page=" + options.content.pageIndex + "&pageSize=" + options.content.pageSize, "", "Search failed.")
            .then(function (response) {
                var searchResults = [];
                searchResults.content = [];
                searchResults.contentTotal = response.total;
                searchResults.clientPaging = false;

                var results = response.results;
                if (results.length > 0) {
                    var Search = MadCap.CreateNamespace("WebHelp.Search");

                    for (var i = 0; i < results.length; i++) {
                        var result = results[i];
                        var rank = result["rank"];
                        var title = result["title"];
                        var link = result["link"];
                        var linkUrl = GetLinkUrl(link);
                        var abstractText = result["abstractText"];

                        var searchResult = new Search.SearchResult(rank, title, linkUrl.FullPath, unescape(abstractText));
                        searchResults.content.push(searchResult);
                    }
                }

                return searchResults;
            });

        return search;
    };
}
  • 使用
    $.support.cors=true
    将适用于IE,但有例外 它将为对 有关安全性的web服务:
    “此网页正在访问不受其控制的信息。这会带来安全风险。是否要继续?”
    这绝对令人讨厌,我不会让我的客户为此修改他们的安全设置。这也不适用于Edge
  • 将AJAX调用中的
    crossDomain
    属性更改为
    false
    -行为与上述行为相同,只是它现在不适用于所有其他浏览器
  • 我已经读了很多关于使用
    数据类型:“jsonp”
    ——但据我所知,它已被弃用,只支持GET请求。所以我没有试过,想远离它
  • 我还读到,因为我试图通过本地驻留的非托管文件(即url是
    文件://
    ,而不是
    http://
    )访问web服务,所以技术上不支持它作为源站-因此在这种情况下,允许任何源站都没有帮助。我不确定这有多真实,甚至不知道如何检验这一点。不管怎样,我没有尝试通过localhost提供html文件,因为我不想要求我的客户机只为IE/Edge做这个,因为它在所有其他浏览器上都可以正常工作
  • 我尝试使用
    XMLHttpRequest
    而不是和AJAX调用。它需要我接着执行
    JSON.parse(result)但似乎适用于所有浏览器,包括IE,除了Edge
  • 我在某种程度上理解CORS和同源策略的局限性,但我绝对不理解Microsoft浏览器和其他浏览器之间的区别

    请帮忙