$ .get后回调?

时间:2015-02-03 18:03:14

标签: javascript jquery ajax flask

我有一个javascript函数foo。我希望在foo完成时调用bar。我试过它作为回调。这是行不通的。当foo仍在执行$ .get(它在服务器上启动一个非常长的python例程)时调用Bar。

  function foo(callback){
    $.get(
        url="/myurl",
        data={key:($(this).attr('data-button'))}, 
        function(returndata) {
            var array = eval(returndata);
            drawTable(array);
      });

      callback();
  }

FOO(巴);

然而这有效。我很困惑为什么......

  function foo(callback){
    $.get(
        url="/myurl",
        data={key:($(this).attr('data-button'))}, 
        function(returndata) {
            var array = eval(returndata);
            drawTable(array);
            callback();
      });

  }

FOO(巴);

2 个答案:

答案 0 :(得分:1)

这是因为$.get是异步的。 来自文档...

This is a shorthand Ajax function, which is equivalent to:
$.ajax({
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

你可以认为它是在一个单独的线程中运行的。所以bar()不会作为回调。但在你的第二个例子中,“function(returndata)”是$ .get的回调函数,因此在内部使用bar()将完成工作,因为现在bar()只会在$ .get完成后调用。

答案 1 :(得分:0)

它在第二种情况下工作为' bar()'一旦响应到来就被调用。现在回到回调,编写回调的简单概念如下:



function func1(callback) {
  alert('func1');
  callback();
}

function func2() {
  alert('func2');
}

func1(func2);




所以在你的情况下,理想情况下这应该有效:



 function foo(callback) {
   $.get(
     url = "/myurl",
     data = {
       key: ($(this).attr('data-button'))
     },
     function(returndata) {
       var array = eval(returndata);
       drawTable(array);
       callback.call();
     });
 }

 function bar() {
   //todo

 }

 foo(bar);