使用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版本