浏览器使用 jQuery Ajax 获取服务端数据报 Provisional headers are shown 错误?

2018-07-17 19:18:45 +08:00
 jayan2358

问题描述

初学 Flask 框架后尝试做一个练手项目,功能是通过收集使用网络上公开的哈希解密 API 来获取明文 通过 jQuery.get() 获取服务端数据时发现返回的数据大小为 0 字节,而把 URL 直接通过浏览器打开响应却是正常的。

问题出现的环境背景及自己尝试过哪些方法

Google 了一圈试了一圈没解决问题,好多人说跨域,可是这肯定是一个域名下的啊,解决方法众说纷纭,感觉一脸懵逼。 其实一模一样的功能我用 Laravel 以前实现过,那时候写的也蛮顺的,所以考虑是写后端代码时出了问题(仅猜测),emmm 好像以前 Ajax 我是用原生 JS 写的,不记得了。

相关代码

main.py (Flask)

import requests
from flask import Flask, request, render_template

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/decrypt')
def decrypt():
    payload = {'hash': request.args.get('hash'), 'hash_type': 'md5', 'email': 'jayan2358@protonmail.com',
               'code': '1vds464vxc61v'}
    r = requests.get('http://md5decrypt.net/en/Api/api.php', params=payload)
    return r.text


if __name__ == '__main__':
    app.run()


index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>CHash</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4/dist/css/bootstrap.min.css">
</head>
<body>
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
    <a class="navbar-brand" href="#">CHash</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarCollapse">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item active">
                <a class="nav-link" href="#">Home</a>
            </li>
        </ul>
        <form class="form-inline mt-2 mt-md-0">
            <input id="hash" name="hash" class="form-control mr-sm-2" type="text" placeholder="Enter Hash">
            <button id="decrypt" class="btn btn-outline-success my-2 my-sm-0">Decrypt</button>
        </form>
    </div>
</nav>
<script src="https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4/dist/js/bootstrap.min.js"></script>
<script src="../static/main.js"></script>
</body>
</html>

static/main.js

$("#decrypt").click(function () {
        $.get("/decrypt", {hash: $("#hash").val()}, function (data) {
            alert(data);
        })
    }
);

你期待的结果是什么?实际看到的错误信息又是什么?

萌新求教,麻烦各位大佬了,希望给出解决方法的同时简要说明一下报错的原因 Chrome DevTools 抓包 Ajax 请求报了一个 Provisional headers are shown 错误,截图如下,Response 是空的,所以不截了

4013 次点击
所在节点    Flask
5 条回复
shintendo
2018-07-17 20:10:18 +08:00
建议:这种问题可以尝试换个浏览器,看会不会报出不同的错误信息来(甚至可能顺利执行)。
shintendo
2018-07-17 20:14:08 +08:00
啊,我看出来了,你那个 button 放在 form 里面,默认是 submit 的,点击的同时会触发表单提交,你给设个 type=button 试试
jayan2358
2018-07-17 20:20:18 +08:00
@shintendo 用 IE11 试了下反应一模一样
![error]( https://imgchr.com/i/PlWCjO)
jayan2358
2018-07-17 20:23:28 +08:00
@shintendo
我试试看
jayan2358
2018-07-17 20:26:12 +08:00
@shintendo 成功了谢谢大佬

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/471738

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX