当前位置: 首页 > 知识库问答 >
问题:

如何让AJAX张贴JSON在烧瓶?[重复]

权烨磊
2023-03-14

我将按照本教程学习如何用Python构建应用程序。

教程(接近尾声)讲述了如何在python中获得一个发布的AJAX json,如下所示:

超文本标记语言代码:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script type="text/javascript">
// setup some JSON to use
var cars = [
    { "make":"Porsche", "model":"911S" },
    { "make":"Mercedes-Benz", "model":"220SE" },
    { "make":"Jaguar","model": "Mark VII" }
];

window.onload = function() {
    // setup the button click
    document.getElementById("theButton").onclick = function() {
        doWork()
    };
}

function doWork() {
    // ajax the JSON to the server
    $.post("receiver", cars, function(){

    });
    // stop link reloading the page
 event.preventDefault();
}
</script>
This will send data using AJAX to Python:<br /><br />
<a href="" id="theButton">Click Me</a>

Python代码:

import sys

from flask import Flask, render_template, request, redirect, Response
import random, json

app = Flask(__name__)

@app.route('/')
def output():
    # serve index template
    return render_template('index.html')

@app.route('/receiver', methods = ['POST'])
def worker():
    # read json + reply
    data = request.get_json()
    result = ''


    for item in data:
        # loop over every row
        result += str(item['make']) + '\n'

    return result

if __name__ == '__main__':
    # run!
    app.run()`

当我运行脚本并在浏览器中点击按钮“点击我”时,当我检查浏览器中的响应时,我会得到“500内部服务器错误”。如果我打印数据变量,它会在单击事件的终端中打印出无。我尝试了评论中给出的建议,在python脚本中使用get_json(强制=true),并在html文件中对“汽车”json进行字符串化,但没有成功。

共有1个答案

农弘毅
2023-03-14

看起来您没有指定post请求的内容类型看看官方文档中说的:

默认情况下,如果mimetype不是应用程序/json,此函数将返回无,但这可以由force参数覆盖。

您还需要将cars对象序列化为json对象。

你可以这样做:

function doWork() {
    // ajax the JSON to the server
    $.ajax({
        type: 'POST',
        url: '/receiver',
        data: JSON.stringify (cars),
        success: function(data) { alert('data: ' + data); },
        contentType: "application/json",
        dataType: 'json'
    });
    // stop link reloading the page
    event.preventDefault();
}
 类似资料:
  • 我有一个通过5000端口运行的烧瓶服务器,它很好。我可以访问http://example.com:5000 但是是否可以简单地在http://example.com上访问它呢?我想这意味着我必须把端口从5000改为80。但当我在Flask上尝试时,我运行它时会得到这个错误消息。 运行返回 我需要先干掉这些进程吗?安全吗?或者有没有另一种方法可以使Flask在端口5000上运行,但可以用某种方式重定

  • 客户端代码: 服务器代码: 问题是我的用户名和密码总是空的。 我还尝试使用: 和 打印内容时,我有: 编辑: 我添加了json。转储和使用请求。获取_json(),它就成功了

  • 我遇到了一个问题,我的javascript/python脚本。我想做的是传递一个字符串到python烧瓶,这样我以后可以使用它。当我点击按钮发送字符串时,没有错误,但什么也没发生。我基本上是一个自学成才的程序员,所以如果我的脚本格式不正确,我道歉! Javascript: 蟒蛇瓶: 我希望能够看到打印到控制台或命令提示符的字符串,我假设print()是正确的方法?欢迎任何帮助,谢谢:)

  • 我有一个基本的“hello world”烧瓶应用程序正在运行。 我在Ubuntu 14.04上,使用Apache 2.4。我安装了mod_wsgi。 我创建了一个~/web/piFlask/venv/来保存一个安装了flask的virtualenv创建的Python2。 但是,我希望我的flaskapp导入我编写的Python3. x模块。 我需要做什么才能做到这一点? 我试着创建一个

  • 我正在检索mongo集合中与子字符串查询匹配的所有文档: 然后将所有匹配的文档作为JSONArray返回给java客户端: 当我想在java端解析JSONArray时,我必须执行以下操作: 我很有信心我在这里做错了什么。我不必先将JSONArray元素转换为字符串,然后再转换为JSONObject。我是否可以直接从JSONArray中检索JSONObject,而不用先将其转换为字符串?

  • 问题内容: 我试图用一个烧瓶形式的sqlalchemy请求的结果填充选择字段。 这是代码: 这是模板: 查看: 模型(仅粘贴了关联表和作者表,很多列都不用了) 我目前收到此错误: 我真正想要的是,选择字段显示作者姓名及其编号,然后将作者编号返回至应用程序(返回至位于头的名为“ add_author”的函数)。 谢谢。 问题答案: 您有两个问题: 正如肖恩·维埃拉(Sean Vieira)在回答中指