0

我有一个 python 脚本,我使用一个按钮和一些带有 ajax 的 javascript 从表单中调用它。我真的很难找到python脚本返回的返回变量。

返回的信息似乎都以错误的顺序发生,这可能不是这种情况,而是它对我的看法。我想要的只是能够获取我的 python 脚本返回的数据。这么简单的事情怎么会这么难!!

任何帮助将不胜感激。谢谢

这是我的代码:

            <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>

我得到的响应是“Hello”、“World”、“Undefined”和“Success”

这对我说,直到我的 javascript 函数完成之后,ajax 函数才真正完成,这并不能帮助我真正掌握返回的变量,因此我可以稍后在 javascript 中使用它

克里斯

编辑。

    <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>

当前成本.py:

导入 MySQL 数据库

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)
4

3 回答 3

1

这就是异步编程的本质。它是非阻塞的。您必须response在回调中启动需要的代码的执行。

于 2013-09-22T19:55:29.000 回答
0

Ajax 中的“A”是异步的。这意味着 HTTP 请求已完成,其余的 JS 代码将执行。您不能依赖于请求何时完成或是否完成。任何依赖于请求返回值的工作都必须在回调 ( success)中完成

function (response) {
    alert("Success");
    // this will alert the response
    alert(response);
}

此外,return回调的 from 不会去任何地方。你不从draw任何一个返回。

您可以使用 deferred 使语法更可口:

function drawgraph() {
    var x = draw();
    x.done(function (response) {
        alert(x);
    });
}
function draw() {
    return $.ajax(/* your code */
于 2013-09-22T19:55:53.970 回答
0

Javascript是异步的。当您发出警报x时,很可能是undefined因为尚未收到 ajax 响应,或者甚至没有启动 ajax。传递一个可以处理响应的回调函数,而不是返回它:

//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);
       }
    });
}

编辑

在我的小测试中,我只是在一个

$(document).ready(function() {
  drawgraph();
}

例如,在页面加载时。一次。很清楚你想如何触发它。如果单击一个按钮,并且该按钮id是“按钮”,<button id="button">click</button>

$('#button').click(function() {
  drawgraph();
}

执行链:

  1. 叫做绘图的东西
  2. drawgraph 调用 draw 并传递一个回调函数
  3. 在 ajax 成功时,回调函数与响应一起调用

因为 javascript 是异步的,所以你必须“等待”才能“继续执行剩下的代码”,而最好的方法是从 $.ajax 内部继续执行成功。

于 2013-09-22T19:57:35.837 回答