停止执行,直到jquerypost完成

stop execution until jquery post is done

本文关键字:jquerypost 完成 直到 执行      更新时间:2023-09-26

我对$有问题。post是我的代码:

$("#datepicker").click(function () {
    var id = $("#doctor_book").val();
    var url = $('#base_url').attr('data-url') + 'index.php/home/disable_days';
    $.post(url, { id: id }, function (r) {
        r = JSON.parse(r);
        var obj = {
            Mon: 1,
            Tue: 2,
            Wed: 3,
            Thu: 4,
            Fri: 5,
            Sat: 6
        };
        var specific = new Array();
        var final_array = new Array();
        for (var a = 0; a < r.length; a++) {
            for (var b = 0; b < Object.keys(obj).length; b++) {
                if (r[a] === Object.keys(obj)[b]) {
                    specific.push(Object.keys(obj)[b]);
                }
            }
        }
        for (var c = 0; c < specific.length; c++) {
            delete obj[specific[c]];
        }
        for (var key in obj) {
            final_array.push(obj[key]);
        }
        console.log(r);
        yverebi(final_array);
    });
});
function yverebi(final_array) {
    $("#datepicker").datepicker({
        beforeShowDay: function (date) {
            var day = date.getDay();
            return [$.inArray(day, final_array) == -1]
        }
    });
    $('#datepicker').datepicker("show");
}

r看起来像这样["Mon","Sat"],我看到了停止ajax请求然后执行一些其他函数的例子,但我想要的是停止运行javascript代码,直到请求完成。

停止运行javascript代码,直到完成后请求

这不是它的工作方式。一旦你运行了一些代码,它就会运行。POST是异步的,这意味着你剩下的代码不会(也永远不会)等待它

您实际要做的是定义一个回调函数(您已经有了,它从function(r){ ...开始)。这个函数和里面的所有代码都是在POST完成后运行的。

您可以使用jquery-post的不同回调方法。

$.post( "example.php", function() {
  alert( "success" );
})
  .done(function() {
    alert( "second success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "finished" );
});

无论你想要哪种方法。我认为对于您的情况,您可以使用done()方法。

您可以将代码更改为

 $.post(url, { id: id })
   .done(function(r){
    // your code
 });

您所说的叫做承诺。每当异步任务完成后,就会使用promise执行后续任务。

这同样的东西有时也可以用于您自己的自定义函数。

参考文章

您可以使用"繁忙"变量:

var busy = false; 
$.post(url, {id: id}, function(r){
  if(busy) return false;
  var busy = true;
  /*rest of your code*/
 /* on your $.post callback : */
 var busy = false;