我在dreamhost服务器上,并且有一些HTML,当按下按钮时会调用一些javascript。我试图在点击这个按钮时调用python脚本。
首先,据我所知,因为我在共享主机上,所以我不能使用AJAX,因为它不受支持,所以我需要在没有AJAX的情况下这样做。现在我正在努力做一个有效的XMLHttpRequest
。
我也意识到做一个XMLHttpRequest
不是最好的方法,因为文件都在服务器上必须有一种方法直接调用文件?
因此,如果有人打电话告诉我如何直接调用它或帮助我在浏览器控制台中修复此错误,这将是很好的。 谢谢你的帮助
修改
当用户点击此文件上的按钮时,我有一个HTML文件,它调用HTML文件中的一些javascript。这个javascript当前对同一服务器和HTML文件上的python脚本发出POST请求。
我想要的不是对服务器上的python文件发出post请求,我想直接调用python文件,从运行的javascript中,当单击HTML文件中的按钮时。
包含javascript和python文件的HTML文件都在同一台服务器上。而且我不希望python在浏览器中运行,我希望它在服务器的后台运行。
如何使用Javascript调用此python文件?
答案 0 :(得分:2)
据我了解您的问题,您要做的事情称为“远程过程调用”,或某种面向服务的体系结构(SOA)。
您正在向服务器发出POST
请求。
您可以在发送GET,PUT,POST ...请求时设置像flask或cherrypy这样的中间件来运行脚本。在中间件控制器内部,您可以调用脚本。
基本上你已经开始创建一个RESTful api,这是现在在后端运行逻辑的一种非常标准的方法。
用于执行URL路由的不同框架的一些示例:
的Python:
的NodeJS:
这个问题也非常好:JSON, REST, SOAP, WSDL, and SOA: How do they all link together
您可以通过浏览器执行此操作的另一种方法是使用套接字,这将打开客户端与服务器之间的连接。
在javscript中你可以使用socketio:
<script src='/socket.io/socket.io.js'></script>
<script>
var socket = io();
socket.connect('http://localhost:8000')
socket.emit('run_a_script_event', {arg1: 'hello', arg2: 'world'});
</script>
在您的python代码中,您可以使用socketio客户端进行python(https://pypi.python.org/pypi/socketIO-client):
from your_module import thescript
from socketIO_client import SocketIO, LoggingNamespace
def run_a_script(*args):
print('arg1 and arg2', args)
thescript()
socketIO = SocketIO('localhost', 8000, LoggingNamespace)
socketIO.on('run_a_script_event', run_a_script)
看起来还有一个专门用于烧瓶的版本:https://flask-socketio.readthedocs.org/en/latest/
或者您可以直接在浏览器中运行python,方法是将其转换为带有转换器的javascript:
或者您可以使用节点javascript生成运行python脚本的子进程:
或者您可以将python脚本导入节点,如: