如何使ajax参数动态化?

时间:2017-12-07 13:13:23

标签: javascript jquery ajax

以下是我的代码的一部分:

if ( external_link ) {
   data = {external_link : external_link};
} else {
   data = form_data;
}

$.ajax({
    url: base_url + frm.attr('action'),
    type: frm.attr('method'),
    data: data,
    cache: false,
    contentType: false, // this
    processData: false, // and this should be removed when external_link isn't false 
    success: function (imageUpload) {

我尝试做的只是让contentType: falseprocessData: false参数动态化。我的意思是,如果上述条件为真,则应删除这两个提到的参数。我怎么能这样做?

3 个答案:

答案 0 :(得分:6)

var ajaxParams = {
  url: base_url + frm.attr('action'),
  data: data
  // contentType not here
};

if (something) {
  ajaxParams.contentType = false; // add new parameter
}

$.ajax(ajaxParams);

答案 1 :(得分:0)

将对象传递给ajax调用而不是在那里创建文字对象?最好通过在呼叫周围包裹一个功能。

以下代码不是直接实施,而是展示原则:

var makeAjaxAndExecute = function(param1, param2){
  var ajaxObjectInitiate = {object literal here}
  ajaxObjectInitiate.param1 = param1;
  ajaxObjectInitiate.param2 = param2;

  $.ajax(ajaxObjectInitiate //.... rest of your code 
}

您可以进一步单独配置对象并实际进行呼叫,您可以在其他地方拥有一般的请求生成器完全取决于您的需求以及您想要/需要它的复杂程度。

如果你需要在很多调用中执行它,我会选择保持对象的完全隔离的构建器,并且具有选项以及可能的内部状态和逻辑的getter和setter。一旦设置了对象,将其传递给ajax调用。

可扩展,可维护且易于调试,但如果你有这么简单的逻辑则不需要。

答案 2 :(得分:0)

如果首先定义最小的选项集,如果满足条件则添加其他两个选项呢?

var options = {
    url: base_url + frm.attr('action'),
    type: frm.attr('method'),
    data: data,
    cache: false,
    success: function (imageUpload) {
    ...
};

if ( external_link ) { // the external link entered

    options.contentType: false; // this
    options.processData: false; // and this should be removed when external_link isn't false 
    options.data = {external_link : external_link};
} else {
   options.data = form_data;
}

$.ajax(options);