Ajax如何调用python脚本

想要在web端某个按钮的js代码中,使用ajax来调用服务端的一个python脚本,从数据库取出数据并写入服务端的另一个html文件中,可以实现吗?
w3c上有这样的一个例子,不过是用的asp文件,而且只是操作了原来的html,(代码是response.write("<table>"))

所以想来问下可以用python来实现这一想法吗。。

阅读 29.6k
4 个回答

JS毕竟是前端逻辑,你可以通过AJAX向后台发送一个请求,后台代码(譬如Java)完成对Python脚本的调用。


补充内容:

Http的原理就已经限定了浏览器和服务器通信的过程:

浏览器(客户端)向服务器发送一个请求,请求内容在所发送的“请求报文”中,Web服务器(Nginx、Apache等)接受到请求后,调用及转发请求内容到你的后台代码,后台代码进行逻辑处理后,通过Web服务器返回一个携带结果的Http“响应报文”,客户端接受后,对报文做相应处理,譬如浏览器会把收到的HTML文档解析成我们看到的样子。

AJAX本质上也只是异步向服务端发送请求而已,真正在服务器上做处理的,依然是网站的后台代码,AJAX不能直接操作服务器上的东西

原理理解了,代码只是工具而已。

你用Flask,那么你有两种方法可以操作服务器上的文件:

1.直接把逻辑写在AJAX发送请求的URL所对应的后台代码中。

2.在后台逻辑中调用你服务器上的本地Python脚本,执行本地脚本的方法很多,我简单给你举几个:

import os
import commands
# import subprocess    这个用法忘记了……

file = os.popen('xxx.py')    # 返回值是一个记录执行回显的文件

os.system('xxx.py')    # 单执行,没有返回值

status, output = commands.getstatusoutput('xxx.py')
# 返回值2个,第一个是状态码,即命令是否执行成功;第二个是执行结果回显

调用你要调用的脚本就好了。

用Flask很简单的:比如:

index.html 放到templates文件夹下:

<!DOCTYPE html>
  <html lang="en">
    <head>
      <link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
      <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
      <script src="http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
      <script type=text/javascript>
        $(function() {
            $('#calculate').click(function(){
              $.ajax({
                url: '/addnumber',
                data:{
                  a: $('#a').val(),
                  b: $('#b').val()
                },
                dataType: 'JSON',
                type: 'GET',
                success: function(data){
                    $("#result").html(data.result);
                }
                });
             });
        });
  </script>
  </head>
  <body>
    <div class="container">
      <div class="header">
        <h3 class="text-muted">addNum</h3>
      </div>
      <hr/>
      <div>
      <p>
    <input type="text" id='a' size="5" name="a"> +
    <input type="text" id='b' size="5" name="b"> =
    <span id="result">?</span>
    <p><button class="btn btn-success" id="calculate">calculate</button>
      </form>
      </div>
    </div>
  </body>
</html>

python脚本run.py:

from flask import Flask, render_template, request, jsonify

app = Flask(__name__)


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


@app.route('/addnumber')
def add():
    a = request.args.get('a', 0, type=float)
    b = request.args.get('b', 0, type=float)
    return jsonify(result=a + b)

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

安装好了flask之后,直接python run.py即可

ajax就是发送了一个http请求到后台,后台要做的就是接收这个请求,处理并返回结果,用Python做个http服务器就好了,这方面有很好的框架,flask就不错你可以试试

请问这个用django怎么做呢?

我已经用views.py获取到了前端输入的值,如何把这些值传递给后端的某个python脚本里?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏