停止执行,直到jquery post完成

时间:2015-03-30 11:37:51

标签: javascript jquery

我有$ .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看起来像这样[&#34; Mon&#34;,&#34; Sat&#34;],我看到了停止ajax请求然后执行其他一些功能的例子,但我想要的是停止运行javascript代码直到发布请求完成。

4 个答案:

答案 0 :(得分:0)

  

停止运行javascript代码,直到发布请求为止

这不是它的工作原理。运行一些代码后,它就会运行。 POST是异步的,这意味着您的剩余代码将不会(并且永远不会)等待它。

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

答案 1 :(得分:0)

你可以使用&#34;忙碌&#34;变量:

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;

答案 2 :(得分:0)

您可以使用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
 });

答案 3 :(得分:0)

你所说的是一种承诺。每当完成异步任务,然后发布完成后,使用promises执行后续任务。

同样的事情也可以在你自己的自定义函数中使用。

Reference Article