【发布时间】:2017-09-27 02:27:01
【问题描述】:
我在 HTML 页面中有一个表单,它执行以下操作:
form method="POST" id="myForm" onsubmit="callSlates();">
Javascript函数如下:
function callSlates(){
var form=document.getElementById('myForm');
form.action = "https://dev1-apiservicesweb.dev.jabs.com:8111/api/v1/systems/slates";
// collect the form data while iterating over the inputs
var data = {};
for (var i = 0, ii = form.length; i < ii; ++i) {
var input = form[i];
if (input.name == "ID1") {
data[input.name] = input.value;
}
if (input.name == "SDCode") {
data[input.name] = input.value;
}
}
var xhr = new XMLHttpRequest();
xhr.open('POST', form.action);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
alert(xhr.responseText);
}
}
xhr.send(JSON.stringify(data));
}
//return false;
}
POST 调用正在发生,但是当我检查请求标头时,它显示 application/x-www-form-urlencoded 并以错误结束 504-Gateway Timeout Error
我调用的端点需要 json 标头和 JSON 数据。我相信我正在这样做,但是当我使用 Chrome 开发人员工具时,我看不到这一点。是否与拨打电话的方式有关?
编辑:当我尝试使用 Postman 访问该 URL 时,标头和正文为 JSON,得到 200 响应(如预期的那样)。
更新:我知道提交的是表单而不是 Ajax 调用,因此接受了 Barmar 建议并将 return false; 放入表单 onsubmit。现在我不再获得 504 而是获得 405。
以下是当前看到的请求标头:
Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:dev1-apiservicesweb.dev.jabs.com:8111
Origin:http://localhost:3000
在一般信息中,它说:
Request Method:OPTIONS
Status Code:405
根据le_m,这可能是 CORS 问题吗?
【问题讨论】:
-
为什么是
java标签? -
我发布了类似的问题,但受众较少且没有响应,Java 开发人员经常进行 ajax 调用并使用 XMLHttpRequest 对象,因此添加了。
-
有人可以帮我吗?它已经困扰我一天了。
-
我认为正在发生的事情比您介绍的要多。就像表单提交一样。或者可能是 CORS。
-
表单提交即可。这不是 CORS 问题,因为我在从 Postman 拨打电话时没有发现任何问题。表单提交会导致任何不必要的问题吗?
标签: javascript json xmlhttprequest