【问题标题】:Python API and html script: Unexpected token d in JSON at position 0Python API 和 html 脚本:JSON 中位置 0 的意外标记 d
【发布时间】:2019-12-14 16:09:11
【问题描述】:

我正在尝试创建将接受登录的网页,重定向到数据页面,所有这些都是通过 Python 中的 API / CRUD 和带有脚本的 html 页面完成的。所有这些都是为了大学作业。

因此,当用户登陆主页时,他们会被重定向到登录页面。在此他们输入用户名和密码,然后单击提交按钮。这一切都很顺利。

但是,在单击提交时,我收到了标题中提到的错误。我已经在 J​​SONLint.com 中验证了 JSON。 API 中的“return”是重定向,被接收并在控制台中显示为错误。

登录页面的脚本是:

    <script>
        function login(){
            // used to create the login
            var userLogin={}
            userLogin.uname=document.getElementById("loginUsername").value
            userLogin.pass=document.getElementById("loginPassword").value
            $.ajax({
                "url":"http://127.0.0.1:5000/processlogin",
                "method":"POST",
                "data":JSON.stringify(userLogin),
                "dataType":"json",
                contentType:"application/json; charset=utf-8",
                "success":function(result){
                    console.log(result)
                    alert("Logged In");
                },
                "error":function(xhr,status,error){
                    console.log("error: " + status + ", message: " + error);
                    console.log(JSON.stringify(userLogin))
                    console.warn(xhr.responseText)
                }
            })
        }
    </script>

Python 中的 API 是:

@app.route('/processlogin',methods=['GET','POST'])
def process_login():
    # check credentials
    # if bad, redirect to login page again
    #content=request.get_json(force=True)
    #print(content)
    session['username']='got it'
    return redirect('data.html')

并且浏览器中的控制台显示:

当我在 Python API 中输入 return 'done' 时,浏览器控制台会在错误中显示此内容,而不是 HTML 代码。

感谢您的任何建议。

西莫

【问题讨论】:

    标签: javascript python api


    【解决方案1】:

    ajax 调用中的dataType 参数表示预期返回JSON 值,但您返回的是html。 JQuery 尝试反序列化响应并失败。

    如果您想将浏览器重定向到一个新页面,这里实际上不需要 Ajax。最好以通常的方式提交表单,并在成功时重定向到将提供data.html 作为响应的路由。

    如果必须通过 Ajax 执行重定向,则响应重定向到在服务器端为 data.html 提供服务的路由。在 ajax 处理程序中,从响应的 location 标头中获取重定向 url,获取 html 并加载它。

    【讨论】:

    • 谢谢snakecharmerb。我想我必须使用 API 来做到这一点。但是,您对 JSON 返回是正确的。一旦我修复了我可以重定向成功的页面
    猜你喜欢
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2020-10-31
    • 2018-08-29
    • 1970-01-01
    • 2019-03-19
    • 2016-12-21
    相关资源
    最近更新 更多