我有一个python脚本,我正在使用按钮和带有ajax的javascript从表单中调用该脚本.我真的很难到达python脚本返回的返回变量.
I have a python script which I'm calling from within a form using a button and some javascript with ajax. I'm really struggling to get to the returned variable which the python script returns.
所有返回的信息似乎是按错误的顺序发生的,可能不是这种情况,而是它对我的外观.我想要的只是能够获取python脚本返回的数据.如此简单的事情怎么会如此困难!
The information which is getting returned all seems to be happening in the wrong order, which is probably not the case but its how it looks to me. All I want is to be able to get the data which my python script returns. How can something so simple be so hard!!
任何帮助将不胜感激.谢谢
Any help will be appreciated. Thanks
这是我的代码:
<script> function drawgraph() { var x = draw() alert(x) }; </script> <script> function draw() { alert("Hello"); $.ajax({ url: "/currentcost.py", success: function(response){ alert("Success"); return response; //here you do whatever you want with the response variable } }); alert("World"); } </script>我得到的答复是你好",世界",未定义"和成功"
The responses I get are "Hello", "World", "Undefined" and "Success"
这对我说ajax函数实际上直到我的javascript函数完成后才真正完成,这实际上并不能帮助我真正掌握返回的变量,因此以后可以在javascript中使用它
This says to me the ajax function isn't actually completing until AFTER my javascript function has finished which doesn't help me actually get hold of the returned variable so I can use it in the javascript later on
克里斯
编辑.
<head> <title>Line Chart</title> <script> var ajaxResponse = "" </script> <script src="Chart.js"></script> <script src="jquery.js"></script> <script> function drawgraph() { function handleResponse(response) { ajaxResponse = response; } draw(handleResponse); }; function draw(handleResponse) { $.ajax({ url: "/currentcost.py", success: function(response){ handleResponse(response); } }); } </script> <script> function alertbox() { alert(ajaxResponse); } </script>Currentcost.py:
Currentcost.py:
导入MySQLdb
def index(req):dtbox = req.form.getfirst('dt','')tmbox = req.form.getfirst('tm','')
def index(req): dtbox = req.form.getfirst('dt', '') tmbox = req.form.getfirst('tm', '')
con = MySQLdb.connect('localhost', 'root', '', 'mydb') with con: cur = con.cursor(MySQLdb.cursors.DictCursor) s = "SELECT tmp, watts FROM currentcost WHERE dt ='" + dtbox + "' and tm like '" + tmbox + "%'" cur.execute (s) rows = cur.fetchall() x="" y="" for row in rows: x=x+row["watts"]+"," y=y+row["tmp"]+"," x="data:["+x+"]" y="data:["+y+"]" con.close() req.write(x) 推荐答案JavaScript是异步的.当您警告 x 时,很可能是 undefined ,因为尚未收到ajax响应,或者甚至没有启动ajax.传递一个可以处理响应的回调函数,而不是返回它:
Javascript is asynchronous. When you alert x it will most likely be undefined because the ajax response is not received yet, or ajax is not even started. Pass a callback function that can handle the response, instead of returning it :
//global variable holding the response //substitutes your x var ajaxResponse; function drawgraph() { function handleResponse(response) { ajaxResponse = response; //here you may want to do something with the response //like calling a function that uses the global variable ajaxResponse //alert(response); } draw(handleResponse); }; function draw(handleReponse) { $.ajax({ url: "/currentcost.py", success: function(response){ handleResponse(response); } }); }编辑
在我的小测试中,我只是在
Edit
In my little test I just called drawgraph in a
$(document).ready(function() { drawgraph(); }例如,页面加载时.一次.您不清楚如何触发它.如果单击按钮,并且按钮 id 是"button",则< button id ="button"> click</button>
Eg, on page load. Once. It was onclear how you wanted to trigger it. If click on a button, and the button id is "button", <button id="button">click</button>
$('#button').click(function() { drawgraph(); }执行链:
由于javascript是异步的,因此必须等待",然后才能继续进行其余的代码",并且最好的方法是从$ .ajax成功内部继续执行.
Because javascript is asynchronous, you have to "wait" before you can "carry on with the rest of the code", and the best way is to continue execution from inside $.ajax success.
更多推荐
通过ajax获取返回值
发布评论