【发布时间】:2015-11-27 00:57:25
【问题描述】:
我正在尝试使用 jQuery $.ajax() 方法在应该启用 CORS 的远程服务器上模拟 POST。
这个想法是提交一个带有用户名/密码的表单,并从成功的身份验证中获取服务器传递的 cookie。
这里是 jQuery:
$.ajax({
type: 'POST',
crossDomain: true,
async: false,
url: this.url,
data: {
username: this.username,
password: this.password
},
xhrFields: {
withCreditentials: true
},
success: function(responseData, textStatus, jqXHR) {
console.info(jqXHR.getAllResponseHeaders());
},
error: function(responseData, textStatus, errorThrown) {
console.warn(errorThrown);
}
});
这是响应标头:
HTTP/1.1 200 OK
Connection: close
Content-Type: text/html
Pragma: no-cache
Cache-control: no-cache,max-age=0,must-revalidate
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: chunked
以及请求头:
Accept: * / *
Accept-Encoding: gzip, deflate, sdch
Accept-Language: fr,en-US;q=0.8,en;q=0.6
Cache-Control: max-age=0
Connection: keep-alive
Host: my remote server (URL is hidden)
问题是我得到一个 console.warn 告诉我:
Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'URL'
我还尝试了一个模拟 POST 的 Chrome 扩展:我将相同的数据放入我的 jQuery 中,一切都成功了,从调用到提交表单后传递的 cookie。
我不明白我的 jQuery 是如何无法加载 URL 的,但还是给了我一个 200 OK !而且我不明白如何使它正确!
我哪里做错了?
【问题讨论】:
-
那里没有启用 CORS。
-
@MinusFour 你怎么知道?我的系统管理员告诉我 CORS 已启用,并且 chrome 扩展成功
-
@PierreLeBot 会有一个
Access-Control-Allow-Originresponse 标题 -
在
data{ username: this.username, password: this.password}中看不到this。 -
@PHPglue 并不真正需要查看
this是什么,它只会增加问题的膨胀。这可能是我在下面提到的 CORS 问题。
标签: javascript jquery ajax cors