[英]javascript ajax POST issue
我对托管在AWS S3上的简单javascript网页有问题,该网页使用ajax对AWS API Gateway进行HTTP POST。
我可以使用curl成功拨打电话:
curl -X POST -H "Content-Type: application/json" https://xxxx.execute-api.eu-west-1.amazonaws.com/dev/ankieta --data @data.json
data.json文件:
{ "imie": "jasiu", "ocena": "6", "opinia": "niezle" }
我的JavaScript代码如下所示。
<html>
<body>
<title>Ankieta</title>
<h1>Wypelnik ankiete</h1>
<button type="button" onclick="uruchom()">JSON</button>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
function uruchom() {
var resultDiv = $("#resultDivContainer");
var myData = {"imie": "Michal"};
$.ajax({
url: "https://xxxx.execute-api.eu-west-1.amazonaws.com/dev/ankieta",
type: "POST",
data: JSON.stringify(myData),
crossDomain: true,
contentType: "application/json",
dataType: 'jsonp',
headers: {
"Access-Control-Allow-Origin": "*"
},
success: function () {
alert("ok");
},
error: function() {
alert("zonk");
}
});
};
</script>
</body>
</html>
这是我从Web调试中得到的错误: GET https://xxxx.execute-api.eu-west-1.amazonaws.com/dev/ankieta?callback=jQuery17203000220305941388_1546897907447&{%22imie%22:%22Michal%22}&_=1546897908872 net::ERR_ABORTED 400
似乎回调存在问题,URL随正文中的数据更改了。 就我而言,我不想在回调良好的情况下进行检查-只想简单地发布数据。
感谢您的任何建议。
POST不能用于发送JSONP请求。 JSONP实际上并不使用AJAX,而是通过创建<script>
标记(其src
是URL)来工作的。 无法通过这种方式发送POST数据,因此该data
将作为URL参数添加。
如果此API在POST数据中需要JSON,则不能使用dataType: 'jsonp'
。 您必须使用dataType: 'json'
。 如果API不允许CORS,则您需要在服务器上使用代理来发出实际请求,因此无法直接从浏览器中进行请求。
不要对数据对象进行字符串化处理。 JQuery为您做到这一点。 只是传递对象。
var myData = {"imie": "Michal"}; $.ajax({ url: "https://xxxx.execute-api.eu-west-1.amazonaws.com/dev/ankieta", type: "POST", data: myData, crossDomain: true, contentType: "application/json", dataType: 'jsonp', headers: { "Access-Control-Allow-Origin": "*" }, success: function () { alert("ok"); }, error: function() { alert("zonk"); } });
感谢您的建议和解答,尤其是在CORS方向。 我确定我的API GW启用了CORS,但没有检查其背后的AWS Lambda,发现我没有将“ Access-Control-Allow-Origin”标头返回给客户端。
exports.handler = function(event, context, callback) { callback(null, { "statusCode": 200, "headers": { "Access-Control-Allow-Origin": "*" } }); };
应用后,我可以发送HTTP POST。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.