Javascript jQuery-将XML字符串发布到服务器
我正在手动构造一些XML来发布到我们的服务器,我已经验证了XML,它是有效的,没有错误 这是我的帖子:Javascript jQuery-将XML字符串发布到服务器,javascript,jquery,Javascript,Jquery,我正在手动构造一些XML来发布到我们的服务器,我已经验证了XML,它是有效的,没有错误 这是我的帖子: $.ajax({ type: 'POST', url: submitUrl, data: xmlString, dataType: 'text', beforeSend:function() { console.log(submitUrl); }, success:function(data) { cons
$.ajax({
type: 'POST',
url: submitUrl,
data: xmlString,
dataType: 'text',
beforeSend:function() {
console.log(submitUrl);
},
success:function(data) {
console.log(data);
},
error:function(error) {
console.log(error);
}
});
var xmlString
是一个包含XML的文本字符串,很遗憾,我不能公开发布它,但本质上它看起来像:
var xmlString = '<?xml version="1.0" encoding="utf-8"?> ... '
var xmlString='…'
代码在web服务器上运行,而不是在本地运行,但我似乎得到的只是:
XMLHttpRequest cannot load <URL>. Origin <URL> is not allowed by Access-Control-Allow-Origin.
XMLHttpRequest无法加载。访问控制不允许原点允许原点。
但是,服务器是开放的,没有锁定这些类型的请求,因此帖子应该可以通过,但是每次我都会收到上面的消息
有什么想法、我可以尝试的事情、我可以获得更好的调试消息的方法吗?您的代码实际上是在尝试发出跨域(CORS)请求,而不是普通的帖子 现代浏览器只允许Ajax调用与源HTML页面位于同一域中的页面 换句话说,每当试图发出Ajax请求的HTML页面与目标URL不在同一个域中时,浏览器都不会发出调用(正如您所期望的那样)。相反,它将尝试发出CORS请求 你说: (…)服务器处于打开状态,未锁定这些类型的请求(…) 更好地调试它:查看页面和服务器之间正在进行的网络事务(发送的请求和接收的响应)。(在Chrome中,它是F12+
网络
选项卡。)如果仔细查看,则不会发送帖子。相反,将生成一个OPTIONS
请求。浏览器希望响应包含一个访问控制允许来源标题,其中包含部署HTML页面的域URL。选项的响应不出现或没有这些标题。然后,您的浏览器得出结论,认为不允许进行此类访问,从而导致错误
有关CORS的更多信息:
跨源资源共享(CORS)是一种允许网页向另一个域发出XMLHttpRequests
的机制。这样的“跨域”请求将被web浏览器禁止,因为
简而言之,要执行CORS请求,您的浏览器:
- 将首先向目标URL发送
选项
请求
- 然后只有当服务器对该
选项的响应包含允许CORS请求的请求时,浏览才会执行调用(几乎与HTML页面位于同一域时的方式完全相同)。
- 如果预期的标题没有出现,浏览器就会简单地放弃(就像它对您所做的那样)
如何解决?最简单的方法是在服务器上启用CORS(启用必要的头)。如果您没有服务器端访问权限,您可以从其他地方镜像web服务,然后在那里启用CORS。您是否可能在该请求中重新请求相同的源策略?提交url在不同的域上吗?我不认为是关于打开的请求、关闭的或w/e的。它仍然是跨域请求,不允许。您应该使用JSONP技术处理类似的内容。或者您对本地php文件执行ajax请求,然后从该文件向新服务器发送xml字符串,然后返回响应并返回ajax。