首先,我成功登录,并使用以下代码片段在浏览器中由服务器设置了 cookie:
var form = new FormData();
form.append("email", "pmsoftwares@hotmail.com");
form.append("pword", "pass123");
form.append("geo", "6.4636835,3.8494566");
var settings = {
async: true,
crossDomain: true,
url: "https://krdly-web-dev0.cfapps.io/session",
method: "POST",
processData: false,
contentType: false,
mimeType: "multipart/form-data",
data: form
};
$.ajax(settings).done(function(response) {
console.log(response);
});
但是当我使用下面的代码获取用户个人资料时,我收到“500:内部服务器错误”:
var form = new FormData();
form.append("email", "pmsoftwares@hotmail.com");
form.append("pword", "pass123");
form.append("geo", "6.4636835,3.8494566");
var settings = {
async: true,
crossDomain: true,
url: "https://krdly-web-dev0.cfapps.io/user",
method: "GET",
xhrFields: {
withCredentials: true
},
processData: false,
contentType: false,
mimeType: "multipart/form-data",
//data: form
};
$.ajax(settings).done(function(response) {
console.log(response);
});
以下代码是 postman 给出的,但在浏览器中不起作用:
var form = new FormData();
form.append("email", "pmsoftwares@hotmail.com");
form.append("pword", "pass123");
form.append("geo", "6.4636835,3.8494566");
var settings = {
"async": true,
"crossDomain": true,
"url": "https://krdly-web-dev0.cfapps.io/user",
"method": "GET",
"headers": {
"cache-control": "no-cache",
"postman-token": "70f8a8cf-6a8f-4905-aaed-69acaeb63cd2"
},
"processData": false,
"contentType": false,
"mimeType": "multipart/form-data",
"data": form
}
$.ajax(settings).done(function(response) {
console.log(response);
});
最佳答案
由于某种原因,浏览器未设置 POST ajax 请求发送的 cookie。只需将以下内容添加到 ajax POST 请求中即可:
xhrFields: {
withCredentials: true
},
解决问题。以下是我的代码:
<!doctype html>
<html>
<head>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
</head>
<body>
<div class="">
<button type="button" name="button">Send Ajax Request</button>
</div>
<script type="text/javascript">
$(document).ready(function(){
$("button").click(function(){
// sendSecondRequest()
// .always(sendFirstRequest)
// .always(sendSecondRequest);
sendFirstRequest().done(sendSecondRequest);
});
});
function sendFirstRequest(){
var form = new FormData();
form.append("email", "pmsoftwares@hotmail.com");
form.append("pword", "pass123");
form.append("geo", "6.4636835,3.8494566");
var settings = {
async: true,
crossDomain: true,
url: "https://krdly-web-dev0.cfapps.io/session",
method: "POST",
processData: false,
contentType: false,
mimeType: "multipart/form-data",
data: form,
xhrFields: {
withCredentials: true
}
};
return $.ajax(settings).done(function(response) {
console.log(response);
});
}
function sendSecondRequest(){
var form = new FormData();
form.append("email", "pmsoftwares@hotmail.com");
form.append("pword", "pass123");
form.append("geo", "6.4636835,3.8494566");
var settings = {
async: true,
crossDomain: true,
url: "https://krdly-web-dev0.cfapps.io/user",
method: "GET",
xhrFields: {
withCredentials: true
},
processData: false,
contentType: false,
mimeType: "multipart/form-data",
//data: form
};
return $.ajax(settings).done(function(response) {
console.log(response);
});
}
</script>
</body>
引用文献:
https://stackoverflow.com/a/7189502/566092
http://aleembawany.com/2006/11/14/anatomy-of-a-well-designed-ajax-login-experience/
关于javascript - 发送 jqueryAjax 请求时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45620574/