2015-07-20 153 views
0

这里是我以前的代码:添加参数在Ajax调用,如果条件为真

$.ajax({ 
    type: "POST", 
    url: "/Test/Save", 
    data: { 
     comments: $('#comments').val() 
     <% if (SomeCondition) { %>, 
      profit: parseInt(profitCombo.getSelectedValue()) 
     <% } %>, 
     myData: JSON.stringify(someData).toString() 
    } 
... 

现在,我把这个代码在一个单独的JS文件,我需要删除ASPX调用。我有一个变量some​​ConditionJsVariable,所以我想做出这样的事情:

data: { 
     comments: $('#comments').val() 
     if (someConditionJsVariable) {, 
      profit: parseInt(profitCombo.getSelectedValue()) 
     }, 
     myData: JSON.stringify(someData).toString() 
    } 

如果该变量为真,添加一个逗号和其它参数。如何做到这一点?

+0

在ajax调用中传递给'data:'的对象可以在别处构造吗?这个逻辑可以封装在一个函数中吗? –

+0

@AnishPatel是的,是的:) –

回答

1

您可以更新代码如下

// create object 
var data = { 
     comments: $('#comments').val(), 
     myData: JSON.stringify(someData).toString() 
    } 

if (someConditionJsVariable) {, 
    data.profit = parseInt(profitCombo.getSelectedValue()); 
} 

data : data // pass object 
1

之前就建立自己的对象,使用功能:

$.ajax({ 
     type: "POST", 
     url: "/Test/Save", 
     data: getMyDataObject() 
     //other settings 
}); 

function getMyDataObject() { 
    var myDataObject = { 
    comments: $('#comments').val() 
    myData: JSON.stringify(someData).toString() 
    } 

    if (someConditionJsVariable) { 
      myDataObject.profit= parseInt(profitCombo.getSelectedValue()); 
    } 
    return myDataObject; 
} 
1

你可以换全部的逻辑成一个函数,像这样:

var testSave = function(someConditionJsVariable, someData, profitCombo) { 

    // construct your data object 
    var data = { 
     comments: $('#comments').val(), 
     myData: JSON.stringify(someData), 
    } 

    // assign the conditional property with value depending on condition 
    !!someConditionJsVariable && (data.profit = parseInt(profitCombo.getSelectedValue())); 

    // return the jQuery promise from ajax call 
    return $.ajax({ 
     type: "POST", 
     url: "/Test/Save", 
     data: data 
    }); 
} 

然后使用这样的功能:

testSave(someConditionJsVariable, someData, profitCombo) 
    .then(function(result) { 
     // do something with result 
    });