Javascript 通过ajax获取返回值

Javascript 通过ajax获取返回值,javascript,python,ajax,Javascript,Python,Ajax,我有一个python脚本,我在表单中使用按钮和一些带有ajax的javascript调用它。我真的很难找到python脚本返回的返回变量 所有被返回的信息似乎都是以错误的顺序发生的,这可能不是事实,但在我看来是这样的。我想要的只是能够获取python脚本返回的数据。这么简单的事情怎么会这么难 任何帮助都将不胜感激。谢谢 这是我的密码: <script> function drawgraph() {

我有一个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>

这就是异步编程的本质。它是非阻塞的。您必须开始执行需要回调中的
响应的代码。

Ajax中的“A”是异步的。这意味着HTTP请求完成,剩下的JS代码执行。你不能依赖于请求何时完成,甚至它是否会完成。任何依赖于从请求返回的值的工作都必须在回调中完成(
success

此外,来自回调的
返回
,不会返回任何地方。您也不会从
draw
返回

您可以使用deferred使语法更容易理解:

function drawgraph() {
    var x = draw();
    x.done(function (response) {
        alert(x);
    });
}
function draw() {
    return $.ajax(/* your code */

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

//保存响应的全局变量
//替换你的x
var-ajaxResponse;
函数drawgraph(){
功能句柄响应(响应){
ajaxResponse=响应;
//在这里,您可能需要对响应进行一些处理
//类似于调用使用全局变量ajaxResponse的函数
//警报(响应);
}
绘制(HandlerResponse);
};
功能图(handleReponse){
$.ajax({
url:“/currentcost.py”,
成功:功能(响应){
HandlerResponse(响应);
}
});
}
编辑 在我的小测试中,我在一个

$(document).ready(function() {
  drawgraph();
}
例如,页面加载。一旦这只不过是你想要如何触发它的一个例子。如果单击一个按钮,而按钮
id
是“按钮”,则
单击

执行链:

  • 有人叫drawgraph
  • drawgraph调用draw并传递回调函数
  • ajax成功后,将使用响应调用回调函数

  • 因为javascript是异步的,所以您必须“等待”才能“继续执行其余的代码”,最好的方法是从$.ajax内部继续执行。

    非常感谢大家,这对我来说都是新鲜事,所以与其匆忙粘贴代码示例并陷入更大的混乱中,我将进行一些阅读并找出我的错误所在!嗯,这很管用。我确实得到了返回的数据,但我希望一个警报框会显示出数据,事实上,一个完整的新页面会生成。当然,我希望最终用一个变量替换警报框,并继续执行代码的其余部分(这是可行的)。麻烦你解释一下上面发生的事情好吗?我可以看到我的表单调用draw(),但是什么调用draw graph()?事实上,如果有任何东西被称为drawgraph(),它似乎会进入一个无休止的循环,不断地调用draw()。对不起,我完全迷路了:-(我还在表单中使用iframe。非常感谢。但我仍在努力。基本上,我将启动其中的3组函数,从外部数据库收集数据。想法是将它们添加到一个全局变量中,我可以在绘制图表时使用。我在HTML开始时定义了所有全局变量页面就在听者内部(var x=“”;)。因此,每次我运行上面的函数时,我只需按照建议执行并保存到其中一个变量。在表单中添加一个带有alert(myVar)的按钮然而,我只是带着空白回来了!我已经用我的原稿编辑了剧本post@Dave我现在越来越近了,发现了几个我在上面更正的拼写错误。我得到的只是数据[]但是,这表明没有记录,如果我从python脚本返回s而不是x,则select语句没有从表单字段中提取的日期。这表明python脚本出于某种原因没有读取表单字段。如果我提交表单时动作与python脚本相同,则会得到一个新页面,其中包含正确的数据输入!!看来我在什么地方遗漏了什么。
    function (response) {
        alert("Success");
        // this will alert the response
        alert(response);
    }
    
    function drawgraph() {
        var x = draw();
        x.done(function (response) {
            alert(x);
        });
    }
    function draw() {
        return $.ajax(/* your code */
    
    $(document).ready(function() {
      drawgraph();
    }
    
    $('#button').click(function() {
      drawgraph();
    }