阻止异步javascript的设计

阻止异步javascript的设计,javascript,jquery,asynchronous,blocking,nonblocking,Javascript,Jquery,Asynchronous,Blocking,Nonblocking,由于JS异步设计的性质,将在ajax调用中为append赋值之前执行append。告诉脚本等待在ajax调用中分配流,然后执行追加的最佳方法是什么?我不想把append放在成功的下面,我想把它们分开 有什么问题吗: var flow; $.ajax({ url: "qa/version.json", dataType: "json", success: function( response ){ flow = response.Version;

由于JS异步设计的性质,将在ajax调用中为append赋值之前执行append。告诉脚本等待在ajax调用中分配流,然后执行追加的最佳方法是什么?我不想把append放在成功的下面,我想把它们分开

有什么问题吗:

var flow;

$.ajax({
    url: "qa/version.json",
    dataType: "json",
    success: function( response ){ 
        flow = response.Version;
    }
});

$(".flow").append(flow);
有什么问题吗

var flow;

$.ajax({
    url: "qa/version.json",
    dataType: "json",
    success: function( response ){ 
        flow = response.Version;
    }
});

$(".flow").append(flow);
“最佳方式”是执行操作以响应异步操作:

$.ajax({
  url: "qa/version.json",
  dataType: "json",
  success: function( response ){ 
    flow = response.Version;
    $(".flow").append(flow);
  }
});
如果要“将它们分开”,则可以定义一个在响应中调用的函数:

$.ajax({
    url: "qa/version.json",
    dataType: "json",
    success: function(response){ 
        $(".flow").append(response.Version);
    }
});
将代码分离为它自己的函数只是将代码组织为可重用组件的问题。无论采用哪种方式,在收到响应之前,都无法对其进行处理,因此您需要执行操作以响应异步调用。

最佳方法是执行操作以响应异步操作:

$.ajax({
  url: "qa/version.json",
  dataType: "json",
  success: function( response ){ 
    flow = response.Version;
    $(".flow").append(flow);
  }
});
如果要“将它们分开”,则可以定义一个在响应中调用的函数:

$.ajax({
    url: "qa/version.json",
    dataType: "json",
    success: function(response){ 
        $(".flow").append(response.Version);
    }
});

将代码分离为它自己的函数只是将代码组织为可重用组件的问题。不管是哪种方式,通过设计,在收到响应之前无法处理响应,因此您需要执行您的操作以响应异步调用。

我不知道您为什么不想将成功处理程序放在成功处理程序的位置,但这里有一个替代方案可以帮助您

当您发出AJAX请求时,jQuery将返回一个延迟的实例。以后可以使用其
.done()
方法设置回调

var appendFlow = function (flow) {
    $(".flow").append(flow);
};

$.ajax({
    url: "qa/version.json",
    dataType: "json",
    success: function(response){ 
        appendFlow(response.Version);
    }
});
另见:


我不知道你为什么不想让你的成功管理者成为成功管理者,但这里有一个可能对你有所帮助的替代方案

当您发出AJAX请求时,jQuery将返回一个延迟的实例。以后可以使用其
.done()
方法设置回调

var appendFlow = function (flow) {
    $(".flow").append(flow);
};

$.ajax({
    url: "qa/version.json",
    dataType: "json",
    success: function(response){ 
        appendFlow(response.Version);
    }
});
另见:

    • 或:

      var dfd = $.ajax( /* your code here, without the success handler */);
      
      // later on...
      dfd.done(function (response) {
        $('.flow').append(response.Version);
      });
      
      或:


      放置
      $(“.flow”)。附加(flow)成功函数内部请解释为什么要将
      success
      回调和
      .append()
      调用分开。这样做是正确的方法。还要解释为什么需要等待流被分配。因为我不仅仅是分配流,比如说如果我有来自json的50个其他参数要附加。我只是觉得有点乱,我喜欢把所有的附件放在一个地方。@TerryChen你总是可以在那里按名字引用函数。。。你不必把代码放在那里。或者,请参阅下面我的答案,简单地将其添加为延迟对象解析时的处理程序成功函数内部请解释为什么要将
      success
      回调和
      .append()
      调用分开。这样做是正确的方法。还要解释为什么需要等待流被分配。因为我不仅仅是分配流,比如说如果我有来自json的50个其他参数要附加。我只是觉得有点乱,我喜欢把所有的附件放在一个地方。@TerryChen你总是可以在那里按名字引用函数。。。你不必把代码放在那里。或者,请参阅下面我的答案,简单地将其添加为延迟对象解析时的处理程序。他明确表示他不想这样做。。。但谁知道为什么呢?因为我不仅仅是分配流,比如说,如果我有来自json的50个其他参数要附加。我只是觉得有点乱,我喜欢把所有的附件放在一个地方,他特别说他不想那样做。。。但谁知道为什么呢?因为我不仅仅是分配流,比如说,如果我有来自json的50个其他参数要附加。我只是觉得有点乱,我喜欢把所有的附件放在一个地方