Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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 jQuery-将XML字符串发布到服务器_Javascript_Jquery - Fatal编程技术网

Javascript jQuery-将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

我正在手动构造一些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"?> ... '
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。