如何将附加参数传递给jQuery $ .ajax()函数

时间:2017-08-07 18:57:11

标签: javascript jquery ajax

我正在使用ajax实用程序函数来发出请求

function ajaxHandler(url, data)
{
    return new Promise(function (resolve, reject) {
        $.ajax({
            type: 'POST',
            url: url,
            dataType: 'json',
            data: data,
            success: function (data) {
                resolve(data);
            },
            error: function (xhr, textStatus, error) {
                reject(error);
            },


        });
    })

}

默认设置大部分时间都有效,但在很多情况下,我希望传递其他参数,例如processDatacontentType。对于此类案件,如何通过processDatacontentType

2 个答案:

答案 0 :(得分:3)

假设options是您要传入的对象;将配置对象移出函数是最干净的。然后使用$.extend更新默认值

function ajaxHandler(url, data, options) {

  var config = {
    type: 'POST',
    url: url,
    dataType: 'json',
    data: data
  }

  if (options && $.type(options) == 'object') {
    $.extend(config, options);
  }

  return $.ajax(config)// add a global error handler if desired
}

用法:

ajaxHandler('path/to/server', {foo:'bar'), {type:'GET'})
  .then(function(data){
     console.log(data);
  }).fail(function(){// or `catch` in jQuery version >=3
     // handle error
  })

请注意,$.ajax会返回" thenable" 承诺,因此使用new Promise是一种反模式。见What is the explicit promise construction antipattern and how do I avoid it?

答案 1 :(得分:1)

我不确定我是否做对了,如果你想添加和覆盖对象的设置你可以使用$ .extend

function ajaxHandler(url, data, extraSettings)
{
    return new Promise(function (resolve, reject) {
        $.ajax($.extend({
            type: 'POST',
            url: url,
            dataType: 'json',
            data: data,
            success: function (data) {
                resolve(data);
            },
            error: function (xhr, textStatus, error) {
                reject(error);
            },


        }, extraSettings));
    })

}

这样$ .extend(obj1,obj2)返回obj1添加或覆盖obj2的属性。

您可以像以下一样使用它:     ajaxHanler(“url”,“data”,{contentType:“text / plain”});