Javascript ASP.NET核心-客户端AJAX不适用于IE11/Edge
我已经花了5天多的时间研究了一个只存在于IE和Edge中的问题(适用于Chrome、FireFox等)。我已经浏览了几乎所有的链接,并尝试了几乎所有的方法,但似乎很多旧帖子的内容/答案都已经过时了 背景:我创建了一个ASP.NET核心web服务-它正在本地主机上的某个端口上运行。理想情况下,我会让我的用户打开一个本地驻留的html文档(意味着驻留在他们的本地文件系统上,而不是托管在服务器上),该文档通过AJAX ping web服务(返回一些JSON)——允许来自web服务的内容显示在html文档中。除了IE和Edge(我使用的是IE11),它在所有浏览器中都能正常工作 这是我的启动。cs: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文
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服务:“此网页正在访问不受其控制的信息。这会带来安全风险。是否要继续?”
这绝对令人讨厌,我不会让我的客户为此修改他们的安全设置。这也不适用于EdgecrossDomain
属性更改为false
-行为与上述行为相同,只是它现在不适用于所有其他浏览器数据类型:“jsonp”
——但据我所知,它已被弃用,只支持GET请求。所以我没有试过,想远离它文件://
,而不是http://
)访问web服务,所以技术上不支持它作为源站-因此在这种情况下,允许任何源站都没有帮助。我不确定这有多真实,甚至不知道如何检验这一点。不管怎样,我没有尝试通过localhost提供html文件,因为我不想要求我的客户机只为IE/Edge做这个,因为它在所有其他浏览器上都可以正常工作XMLHttpRequest
而不是和AJAX调用。它需要我接着执行JSON.parse(result)代码>但似乎适用于所有浏览器,包括IE,除了Edge