如何从函数中停止ajax调用?

时间:2015-06-08 13:32:54

标签: jquery ajax

我有以下代码:

$('#btnCreate').click(function (e) {
    var object;
    if ($(this).hasClass('Create')) {
        Action = 'Create';            
    }
    if ($(this).hasClass('Update')) {
        Action = 'Update'
    }

    switch(Action) {
        case x:
            object=GetFirstFunction();
            break;
        case y:
            GetSecondFunction(); 
            break;
   }    

   $.ajax({
        //passing here all the required things to make a call
        data:object,
        //something
   });
});

function GetFirstFunction(){
    var obj = new Object();
    $('.dlist').each(function (e) {
        if ($(this).val() == '') {
            alert('Please select all the dropdowns');
            return false;
        }
          obj.Id=$('#Id').val();
          obj.Dept=$('#Dept').val();
          obj.Position=$('#Position').val();
          return obj;
    });
}

如果未选择任何一个下拉列表值,如何停止进行AJAX调用。我试过了e.stopPropagation();但它没有用,任何帮助都表示赞赏。

2 个答案:

答案 0 :(得分:2)

我不知道在obj内分配each的逻辑是什么。但看起来你需要这个:

    $('#btnCreate').click(function (e) {
        if ($(this).hasClass('Create')) {
            Action = 'Create';            
        }

        if ($(this).hasClass('Create')) {
            Action = 'Update'
        }

        var obj = null;
        switch(Action) {
            case x:
                obj = GetFirstFunction();
                break;
            case y:
                obj = GetSecondFunction(); 
                break;
       }    

       if (obj != null) {
          $.ajax({
           // Something here
          });
       }

    });

    function GetFirstFunction(){
        var obj = new Object();
        $('.dlist').each(function (e) {
            if ($(this).val() == '') {
              alert('Please select all the dropdowns');
              obj = null;
              return false;
            }
            obj.Id=$('#Id').val();
            obj.Dept=$('#Dept').val();
            obj.Position=$('#Position').val();
        });
        return obj;
   }

答案 1 :(得分:0)

这是基本的控制流程。这里的想法是:如果它匹配这个或那个条件,继续。否则,停止。

最小侵入性干预将是:

// ...
var valid = true;
switch(Action) {
    case x:
        valid = GetFirstFunction();
        break;
    case y:
        valid = GetSecondFunction(); 
        break;
    default:
        return;
}    

if (valid) {
    $.ajax({
    // Something here
    });
}
// ...

然而这缺乏可读性,并且可能在几年内变得难以维护。以下看起来更清晰,并将所有逻辑保存在一个地方:

var object;

var Action = null; // start with nothing
if ($(this).hasClass('Create')) {
    Action = 'Create';            
    object = GetFirstFunction();
} else if ($(this).hasClass('Update')) {
    Action = 'Update'
    GetSecondFunction(); 
}

if (Action) {
    $.ajax({
        //passing here all the required things to make a call
        data:object,
        //something
    });
}