【问题标题】:XMLHttp Request post not hitting the URL and not showing any error as wellXMLHttpRequest 帖子没有点击 URL,也没有显示任何错误
【发布时间】:2019-07-16 05:50:18
【问题描述】:

screenshot of network log我写了一个XMLHttp请求POST方法来代替form post。

在调试时它工作正常,没有显示任何错误,但也没有点击 URL。

var http = new XMLHttpRequest();
var url = "https://localhost:8083/unique/test";
var params = finalJSON;
http.open("POST", url, true);
http.setRequestHeader("Content-type", "application/json; charset=utf-8");
http.onreadystatechange = function() {
    if(http.readyState == 4 && http.status == 200) {
        alert(http.responseText);
    }
}
http.send(params);

这里的 finalJSON 是我的 JSON,它包含这样的数据:

{"ID": "1234", "AMOUNT": "10000", "TXNTYPE": "abc", "CURRENCY_CODE": "123"}

无法找到问题,请帮助缺少什么,为什么 URL 没有命中?

我参考了这个 XMLHttps post request Reference

我还附上了网络日志的截图,其中请求正在进行但没有响应。

【问题讨论】:

  • not hitting the URL 是什么意思?在浏览器开发者工具网络页面中,你看到请求了吗? (顺便说一下,我怀疑 CORS 问题)
  • 是的,网络页面请求中的调试正在进行,但没有显示任何响应。这个 url 实际上是 JAVA 中的一个动作,在调试时它应该使用参数访问 URL,它没有按预期工作。
  • 如果服务器收到请求但没有响应,则问题可能出在服务器上
  • 不,当时我在邮递员上测试了相同的 URL,但不是通过这段代码。无法找出问题所在?
  • 看,邮递员不需要 CORS 响应标头才能工作 - 我怀疑 CORS - 但由于某种原因(哪个浏览器?),您显然没有在浏览器开发者控制台中看到它。

标签: javascript json ajax url xmlhttprequest


【解决方案1】:

尝试使用以下内容:

var url = "https://localhost:8083/unique/test";
var params = finalJSON;
http.open("POST", url, true);
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
http.send(params);

【讨论】:

    【解决方案2】:

    您是否在运行 API 的同一台服务器上运行上述 HTML sn-p?如果没有,那么您将遇到 CORS 问题,这里有一些解决方案:

    如果 CORS 不是问题,请检查请求是否命中服务器。您将哪个服务器和框架用于后端 API?启用调试日志以查看发生了什么。

    否则,您能否发布浏览器控制台和网络选项卡的屏幕截图(显示 API 调用以及请求标头等详细信息的那个)。确保这些没有被禁用。

    您的代码 sn-p 绝对没问题。我在我的系统中运行了相同的(稍作修改)并且工作正常。请注意,我在 spring rest 控制器类中启用了跨域。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>Ajax Interaction</title>
    </head>
    
    <body>
        <script type="text/javascript">
            var http = new XMLHttpRequest();
            var url = "http://localhost:8080/guide/channel";
            var params = '{"channelNumber": 110,"name": "Star Sprorts HD1","price": 20,"channelGroup": "Star"}';
            http.open("POST", url, true);
            http.setRequestHeader("Content-type", "application/json; charset=utf-8");
            http.onreadystatechange = function () {
                if (http.readyState == 4 && http.status == 200) {
                    alert(http.status);
                }
            }
            http.send(params);
    
        </script>
    </body>
    
    </html>

    请参考以下完整代码示例:

    【讨论】:

    • 我已经添加了我的网络日志的屏幕截图,你可以看到请求正在进行,但它的状态只是挂起并且没有响应。
    • @CrossOrigin(maxAge = 3600) 为我工作,谢谢建议。
    猜你喜欢
    • 2016-06-28
    • 2023-02-08
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    相关资源
    最近更新 更多