Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery.when()似乎没有等待_Javascript_Jquery_Json - Fatal编程技术网

Javascript jQuery.when()似乎没有等待

Javascript jQuery.when()似乎没有等待,javascript,jquery,json,Javascript,Jquery,Json,当用户在DOM中执行某些操作时,我需要进行服务器端调用单击复选框,选择下拉列表等。这是一系列事件: 用户单击复选框或其他内容 微调器淡入,UI变得不可用 进行服务器端调用,并返回一些JSON UI中的标签将使用JSON中的值进行更新 微调器淡出,UI再次可用 我遇到的问题是,4和5经常会反转,微调器有时会在标签更新前2秒或3秒消失 我正在尝试使用。何时确保这不会发生,但我似乎做得不对。我一直在看,还有这个,还有 这就是我现在的处境 function UpdateCampaign() {

当用户在DOM中执行某些操作时,我需要进行服务器端调用单击复选框,选择下拉列表等。这是一系列事件:

用户单击复选框或其他内容 微调器淡入,UI变得不可用 进行服务器端调用,并返回一些JSON UI中的标签将使用JSON中的值进行更新 微调器淡出,UI再次可用 我遇到的问题是,4和5经常会反转,微调器有时会在标签更新前2秒或3秒消失

我正在尝试使用。何时确保这不会发生,但我似乎做得不对。我一直在看,还有这个,还有

这就是我现在的处境

function UpdateCampaign() {
    $('#overlay').fadeIn();
    $.when(SaveCampaign()).done(function () {
        $('#overlay').fadeOut();
    });
}

function SaveCampaign() {
    var formData =
        .... // get some data
    $.ajax({
        url: '/xxxx/xxxx/SaveCampaign',
        type: 'GET',
        dataType: 'json', 
        data: { FormData: formData },
        success: function (data) {
            var obj = $.parseJSON(data);
            .... // update a label, set some hidden inputs, etc.
        },
        error: function (e) {
            console.log(e)
        }
    });
}
一切正常。执行服务器端方法,返回并解析正确的JSON,并按预期更新标签


我只需要那个该死的旋转器等待并淡出,直到标签更新后。

问题是,当你承诺时,你没有给美元。事实上,你给它空值,所以它会立即执行。您可以通过从SaveCampaign函数返回$.ajax提供的承诺来解决此问题,如下所示:

function SaveCampaign() {
    var formData = // get some data

    return $.ajax({ // < note the 'return' here
        url: '/xxxx/xxxx/SaveCampaign',
        type: 'GET',
        dataType: 'json', 
        data: { FormData: formData },
        success: function (data) {
            var obj = $.parseJSON(data);
            // update a label, set some hidden inputs, etc.
        },
        error: function (e) {
            console.log(e)
        }
    });
}

我知道罗里已经回答了。但这是我的承诺方法,它总是运行良好,而不是使用成功和错误,而是使用完成和失败

 var jqXhr = $.ajax({
    url: "/someurl",
    method: "GET",
    data: { 
      a: "a"
  });
//Promise method can be used to bind multiple callbacks
  if (someConditionIstrue) {
    jqXhr
    .done(function(data) {
      console.log('when condition is true', data);
    })
    .fail(function(xhr) {
      console.log('error callback for true condition', xhr);
    });
  } else {
    jqXhr.done(function(data){
      console.log('when condition is false', data);
    })
    .fail(function(xhr) {
      console.log('error callback for false condition', xhr);
    });
  }
或者,如果我想要一个非条件回调的公共回调,可以直接绑定if-else块之外的jqXhr变量

 var jqXhr = $.ajax({
    url: "/someurl",
    method: "GET",
    data: { 
      a: "a"
  });

  jqXhr
  .done(function(data) {
    console.log('common callback', data);
  })
  .fail(function(xhr) {
    console.log('error common back', xhr);
  });

砰!成功了!非常感谢。10分钟后我会记下答案。