繁体   English   中英

javascript ajax POST问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM