我在nodejs中使用Express开发了一个http服务器。 服务器在端口3000上本地运行。
有一个html页面服务(index.html)调用ajax GET内容(作为html内容类型)。 这些ajax内容也在相同的端口上,在同一个http protocole中提供相同的服务器。
在节点服务器应用程序中,我添加了Cors Same Origin标头,但是,index.html在控制台中仍然出现错误:“安全错误:操作不安全”。
在浏览器控制台中,我成功地从节点Express应用程序中看到有关“Access-Control-Allow-Origin”等的标题...
此外,同一个应用程序也在提供另一个页面,index.html可以成功获取没有安全错误的数据。
你还有其他建议吗?
function getData(url, type, CType, id) {
//var xhr = new XMLHttpRequest();
//xhr.open(type, url, true);
//xhr.withCredentials = true;
//xhr.onload = function () {
//console.log(xhr.responseText);
//if(CType == 'text/html') { $(id).append(xhr.responseText); }
//};
//xhr.send();
$.ajax({
url: url,
type: type,
crossDomain:true,
cors:true,
success: function(data){
$(id).append(data);
},
error: function(data) {
console.log('ERROR '+url);
console.log(data);
$(id).append(getError(url));
}
});
getData(location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '')+'/modules/mymodule', 'text/html', 'GET', '#content');
答案 0 :(得分:0)
最初使用Firefox 44.0.2和Chromium 48.0.2564.82进行测试得出:"语法错误:无法执行'打开' on' XMLHttpRequest':' TEXT / HTML'不是有效的HTTP方法。"
你的中间两个论点倒退了。
getData(location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '')+'/modules/mymodule', 'text/html', 'GET', '#content');
第二个参数应为"GET"
,第三个参数应为"text/html"
。
答案 1 :(得分:-1)
尝试在从客户端到服务器的ajax调用中添加这三个参数
crossDomain:true,
cors:true,
contentType:"application/json;charset=utf-8",
编辑过:
$.ajax({
url: url,
type: type,
method:"GET",
crossDomain:true,
cors:true,
contentType:"application/html;charset=utf-8"
success: function(data){
$(id).append(data);
},
error: function(data) {
console.log('ERROR '+url);
console.log(data);
$(id).append(getError(url));
}
});
此外,如果您没有采用这种方法,请尝试以下方法: