Javascript 发送带有AJAX问题的POST消息
我目前正在尝试发送一条POST消息,除了没有正确凭据的错误之外,该消息工作正常。但是,在添加凭据标头后,消息类型将更改为选项并失败。我不明白添加标题如何导致类型更改为选项。任何帮助都将不胜感激Javascript 发送带有AJAX问题的POST消息,javascript,jquery,html,ajax,post,Javascript,Jquery,Html,Ajax,Post,我目前正在尝试发送一条POST消息,除了没有正确凭据的错误之外,该消息工作正常。但是,在添加凭据标头后,消息类型将更改为选项并失败。我不明白添加标题如何导致类型更改为选项。任何帮助都将不胜感激 ajaxRequest = $j.ajax({ url: url, type: 'POST', beforeSend : function(req) {
ajaxRequest = $j.ajax({
url: url,
type: 'POST',
beforeSend : function(req) {
req.setRequestHeader('Authorization', auth),
}
success: function(data, status) {
console.log("Success!!");
console.log(data);
console.log(status);
},
error: function(xhr, desc, err) {
console.log(xhr);
alert('fail')
console.log("Desc: " + desc + "\nErr:" + err);
}
});
编辑:为了更清楚,我可以直接进入并注释掉setRequestHeader函数,它会发送消息帖子。我想这是Internet Explorer中的一个问题。在没有明确告知请求方法(POST | GET)的情况下,请求标头在IE中不包含自定义标头,但在其他浏览器中也可以使用 不过,请尝试在jquery的Bug中发布这一点。也可以在其他浏览器中尝试
编辑1:我认为这是jQuery1.4.x中的一个bug。。。。我现在报告了一个bug报告 我想这是Internet Explorer中的一个问题。在没有明确告知请求方法(POST | GET)的情况下,请求标头在IE中不包含自定义标头,但在其他浏览器中也可以使用 不过,请尝试在jquery的Bug中发布这一点。也可以在其他浏览器中尝试 编辑1:我认为这是jQuery1.4.x中的一个bug。。。。我现在报告了一个bug报告 当服务器不知道如何响应ajax请求时,会发生响应 我经常看到在试图发布到第三方域(即跨站点发布)时发生这种情况 OPTIONS方法表示请求获取由请求URI标识的请求/响应链上可用的通信选项的信息。此方法允许客户端确定与资源或服务器功能相关的选项和/或需求,而无需执行资源操作或启动资源检索 您是否尝试过:
- 对要发布到的url进行某种回调
- 在发布到的url上显式地(我假设您正在使用PHP)
- 对要发布到的url进行某种回调
- 在发布到的url上显式地(我假设您正在使用PHP)
- 您遇到的问题是由于使用AJAX时的跨域限制。当您尝试设置授权标头时,浏览器会发出所谓的飞行前请求,以查看服务器是否会接受来自此域的请求
飞行前请求通常作为选项请求发送。如果您正在调用的服务器没有返回与您的域匹配的Access Control Allow Origin头,那么AJAX请求将被阻止。
这里有更多关于这方面的内容:
“用户代理可以通过飞行前请求发现跨源资源是否准备好接受来自给定源的请求(使用非简单方法)。”
我遇到了同样的问题-根据您的场景,有一些可能的解决方法。
如果您有任何方法可以在第三方服务器上设置上述标题(某些应用程序/服务提供此功能),那么这可能是最简单的方法
还有一个名为的javascript库可能适合您,但同样,只有当您有权访问第三方服务器以上载此库的配置文件时,它才有用
其他需要研究的选项是PostMessage和跨域Iframe通信。后者更像是老派黑客,前者是新浏览器的推荐方法。它不适用于IE6/7
我们最终可能使用的选项是一个简单的代理—使用AJAX请求调用我们自己的服务器,并在服务器上调用第三方服务器。这完全避免了跨域问题,并且对我们的场景有其他好处。您遇到的问题是因为使用AJAX时存在跨域限制。当您尝试设置授权标头时,浏览器会发出所谓的飞行前请求,以查看服务器是否会接受来自此域的请求 飞行前请求通常作为选项请求发送。如果您正在调用的服务器没有返回与您的域匹配的Access Control Allow Origin头,那么AJAX请求将被阻止。 这里有更多关于这方面的内容: “用户代理可以通过飞行前请求发现跨源资源是否准备好接受来自给定源的请求(使用非简单方法)。” 我遇到了同样的问题-根据您的场景,有一些可能的解决方法。 如果您有任何方法可以在第三方服务器上设置上述标题(某些应用程序/服务提供此功能),那么这可能是最简单的方法 还有一个名为的javascript库可能适合您,但同样,只有当您有权访问第三方服务器以上载此库的配置文件时,它才有用 其他需要研究的选项是PostMessage和跨域Iframe通信。后者更像是老派黑客,前者是新浏览器的推荐方法。它不适用于IE6/7 我们最终可能使用的选项是一个简单的代理—使用AJAX请求调用我们自己的服务器,并在服务器上调用第三方服务器。这完全避免了跨域问题,并且对我们的场景有其他好处。您使用哪个版本的JQuery