使用jquery.ajax传递一个可为空的参数

使用jquery.ajax传递一个可为空的参数,jquery,ajax,json,Jquery,Ajax,Json,我有以下情况 function Insert(name, parentID) { $.ajax({ type: "POST", url: "topic.aspx/Insert", data: JSON.stringify({ "name": name, "parentID": undefined

我有以下情况

function Insert(name, parentID) {

            $.ajax({
                type: "POST",
                url: "topic.aspx/Insert",
                data: JSON.stringify({
                    "name": name,
                    "parentID": undefined
                }),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {


                },
                error: function (msg) { alert(msg.responseText); }


            });
            }
C#看起来像这样

[WebMethod]
        public static int Insert(string name, int? parentID)
        {
            GM.KnowledgeBase.Business.Topics topics = new GM.KnowledgeBase.Business.Topics();
            return topics.Insert(name, parentID);
        }

当parentID为null或未定义时,我得到“无效的web服务调用,缺少参数值”。除了将参数作为字符串传递并检测字符串是否为空之外,还有没有更优雅的方法来解决此问题?

在未定义参数时不要传递它

function Insert(name, parentID) {

    var data = { name: name };

    if(parentID)
        data.parentID = parentID

        $.ajax({
            type: "POST",
            url: "topic.aspx/Insert",
            data: data,
            // etc...
       });
}
或者,如果您的webmethod可以解析
null
,则应执行以下操作:

data: JSON.stringify({
    "name": name,
    "parentID": parentID || null
}),

由于您(在Insert函数中)将参数声明为可为null,所以您可以安全地不从ajax函数发送它

$.ajax({
                type: "POST",
                url: "topic.aspx/Insert",
                data: JSON.stringify({
                    "name": name

                }),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {


                },
                error: function (msg) { alert(msg.responseText); }


            });
            }

在此之后,您将在parentID参数的Insert函数中看到一个null值

根本不传递参数?好主意,但如果参数为null,则不会传递该参数。JSON.stringify不将其包含在JSON输出中。因此,解决方案是修改C#中方法Insert()的输入参数。也许在没有parendID的情况下创建覆盖方法?这就是你说的吗?@John因为它是可以为null的,试试我的后一个例子。实际上,当value为null时,JSON.stringify将不会在JSON输出中包含这个参数。因此,解决方案是创建额外的c#方法,比如publicstaticintinsert(字符串名)。这works@Johnstringify包含具有空值的属性
console.log(JSON.stringify({“name”:“blah”,“parentID”:null}))try console.log(JSON.stringify({“name”:“blah”,“parentID”:undefined}));我认为这取决于jquery版本