javascript - jQuery - POST XML 字符串到服务器

标签 javascript jquery

我正在手动构建一些 XML 以发布到我们的服务器,我已经验证了该 XML,它是有效的且没有错误。

这是我的帖子:

$.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"?> ... '

代码在网络服务器上运行,而不是在本地运行,但我似乎得到的是:

XMLHttpRequest cannot load <URL>. Origin <URL> is not allowed by Access-Control-Allow-Origin. 

但是,服务器是开放的,并未锁定这些类型的请求,因此该帖子应该可以通过,但我每次都会收到上述消息。

有什么想法,我可以尝试的事情,我可以获得更好的调试消息的方法吗?

最佳答案

您的代码实际上是在尝试发出跨域 (CORS) 请求,而不是普通的 POST。

现代浏览器只允许 Ajax 调用与源 HTML 页面同一域中的页面。

换句话说,只要尝试发出 Ajax 请求的 HTML 页面与目标 URL 不在同一域中,浏览器就不会进行调用(正如您所期望的那样)。相反,它会尝试发出 CORS 请求。

你说:

(...) the server is open not locked down to these types of requests (...)

更好地调试:查看页面和服务器之间进行的网络事务(发送请求和接收响应)。 (在 Chrome 中,它是 F12 + Network 选项卡。)如果仔细观察,POST 永远不会发送。相反,OPTIONS 请求是。浏览器期望响应包含 Access-Control-Allow-Origin header 以及部署 HTML 页面的域 URL。OPTIONS 的响应不会出现或者没有这些标题。然后,您的浏览器会断定不允许此类访问,从而出现错误。

有关 CORS 的更多信息:

跨源资源共享 (CORS) 1是一种允许网页向另一个域发出 XMLHttpRequest 的机制。由于 same origin security policy 否则,此类“跨域”请求将被 Web 浏览器禁止。

简单来说,要执行 CORS 请求,您的浏览器:

  • 首先会向目标网址发送 OPTION 请求
  • 然后仅当服务器对该OPTION的响应包含 adequate headers (Access-Control-Allow-Origin is one of them)为了允许 CORS 请求,浏览器将执行调用(几乎与 HTML 页面位于同一域时的方式完全相同)。
    • 如果预期的 header 没有出现,浏览器就会放弃(就像它对您所做的那样)。

如何解决?最简单的方法是在服务器上启用 CORS(启用必要的 header )。如果您没有服务器端访问权限,您可以从其他地方镜像 Web 服务,然后在那里启用 CORS。

关于javascript - jQuery - POST XML 字符串到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16878764/

相关文章:

c# - 如何在 MVC 中实现所有 sql 表的搜索功能?

javascript - jsPDF大表,标题在第二页重叠

Javascript 回调或返回字符串

Javascript 字符串匹配模式帮助

javascript - Google map Api key 如何在我的 html 中工作?

javascript - JQueryUI 可排序问题 : serialize reporting the wrong order

javascript - 如何使用 JavaScript 提交表单后启用按钮

javascript - 使用 $.each 实例化多个对象

jquery - 动态加载字体 html jquery

javascript - 我在我的 ul 中添加了一个 li,虽然它有效,但会导致错误