不要在jQuery's $.param()中包含空字符串或null

Don't include empty strings or nulls with jQuery's $.param()

本文关键字:包含空 字符串 null param jQuery      更新时间:2023-09-26

我正在使用jQuery的$.param()以以下格式序列化对象:

var queryParams = {
    firstNm: null,
    lastNm: 'M',
    id: null,
    email: null
}

当我使用$.param(queryParams)时,我得到以下内容:

firstNm = &lastNm = M&id =电子邮件=

我想要的是:

lastNm = M

我希望任何为空或空的参数不显示在输出中。这是可能使用jQuery的$.param(),还是需要自定义序列化?

编辑:

这不是这个问题的重复。这个问题更多地与MediaWiki API有关,并且与当参数为null或空时不包括=有关,并且只包括键值对的键。我的问题是,如果值为null或空,是否可以完全从输出中删除键值对。

您可以编写自己的函数来排除null和空值:

var queryParams = {
  firstNm: null,
  lastNm: 'M',
  id: null,
  email: null
}
function isEmpty(value){
  return value == null || value == "";
}
for(key in queryParams)
  if(isEmpty(queryParams[key])) 
     delete queryParams[key]; 
// queryParams now =  { lastNm: "M"}

,如果你从表单中得到这些值,你可以这样做:

$("#form :input[value!='']").serialize()

这是在序列化字符串中删除空参数的另一种方法。

var serializeURLParameters = function(oParameters) {
    return "?" + Object.keys(oParameters).map(function(key) {
        if(oParameters[key]) {
            return key + "=" + encodeURIComponent(oParameters[key]);
        }
    }).filter(function(elem) {
        return !! elem;
    }).join("&");
}

这里你可以排除空值,保持你的属性在你的对象:https://jsfiddle.net/leojavier/bxc57o3v/2/

var queryParams = {
        firstNm: null,
        lastNm: 'M',
        id: null,
        email: null
    }
    var query = {}
    for(item in queryParams) {
        if(queryParams[item] != null && queryParams[item].length > 0) {
            query[item] = queryParams[item]
            console.log(query)
            console.log($.param(query));
        }
    }