ajax - 如何在 Brython 中使用 ajax

标签 ajax brython

我正在使用 Flask 编写一个 Web 应用程序,并且想在 Brython 中使用 browser.ajax 功能,但找不到可行的示例。如果有人演示如何在 Brython 中使用 ajax 的简短示例,那就太好了。更具体地说,如何通过单击提交按钮将用户输入到文本字段的数据传递到文本区域。非常感谢任何帮助!

<小时/>

(我在发布上述问题几周后才写这篇文章)。我按照本教程了解如何在 Flask 中实现 ajax (http://runnable.com/UiPhLHanceFYAAAP/how-to-perform-ajax-in-flask-for-python),并尝试用 Brython 替换 jquery.ajax。不幸的是,我仍然无法让它发挥作用。这是我的代码:

Flask 的部分:

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

@app.route('/_add_numbers')
def add_numbers():
    a = request.args.get('a', 0, type=int)
    b = request.args.get('b', 0, type=int)
    return jsonify(result=a + b)

布赖顿/HTML:

 <body onload="brython()">
 <script type="text/python">
 from browser import document as doc
 from browser import ajax

def on_complete(req):
    if req.status==200 or req.status==0:
        doc["txt_area"].html = req.text
    else:
        doc["txt_area"].html = "error "+req.text

def get(url):        
    req = ajax.ajax()
    a = doc['A'].value        
    b = doc['B'].value
    req.bind('complete',on_complete)
    req.open('GET',url,True)
    req.set_header('content-type','application/x-www-form-urlencoded')
    req.send({"a": a, "b":b})      

doc['calculate'].bind('click',lambda ev:get('/_add_numbers'))

</script>

<div class="container">
  <div class="header">
    <h3 class="text-muted">How To Manage JSON Requests</h3>
  </div>
  <hr/>
  <div>
  <p>
<input type="text" id="A" size="5" name="a"> +
<input type="text" id ="B" size="5" name="b"> =
<textarea type="number" class="form-control" id="txt_area" cols="10" rows = '10'></textarea>
<p><a href="javascript:void();" id="calculate">calculate server side</a>

  </div>
 </div>
 </body>
</html>

我得到的是“结果”:0。看起来 brython 没有将数据发送到 Flask 的 View 函数,但我不知道如何解决这个问题。因此,如果有人能指出我到底做错了什么,那就太好了。

最佳答案

在您的示例中,Ajax 请求是使用 GET 方法发送的。在这种情况下,send() 的参数被忽略:数据必须在附加到 url 的查询字符串中发送

Brython 代码应该是:

def get(url):        
    req = ajax.ajax()
    a = doc['A'].value        
    b = doc['B'].value
    req.bind('complete',on_complete)
    # pass the arguments in the query string
    req.open('GET',url+"?a=%s&b=%s" %(a, b),True)
    req.set_header('content-type','application/x-www-form-urlencoded')
    req.send()

如果你想使用POST方法,那么你可以保持Brython代码不变,但Flask代码应该修改:你必须指定该函数处理POST请求,并使用属性“获取参数” form”而不是“args”:

@app.route('/_add_numbers_post', methods=['POST'])
def add_numbers_post():
    a = request.form.get('a', 0, type=int)
    b = request.form.get('b', 0, type=int)
    return jsonify(result = a+b)

关于ajax - 如何在 Brython 中使用 ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26021672/

相关文章:

javascript - 从 Instagram Graph 获取 JSON 时出现 404 错误

javascript - python markdown哪个版本有mark方法

Python/Brython 类型错误 : Cannot use cached_property instance without calling __set_name__ on it

javascript - 我可以使用 brython 开发 Chrome 扩展吗?

Java servlet 映射

javascript - 将文件名传递给我的 javascript 文件

Javascript 多个 setIntervals

javascript - 将 JSON 附加到网页请求