我正试图通过点击按钮从表单中获取数据,并将其发送到代码背后的web方法。我想把它作为JSON对象传递,或者至少我认为这是惯例?这是我当前的代码,但它会生成一个错误(显示在代码下面)。
$("#addTask")
.click(function( event ) {
var newTask = new Object();
newTask.TaskName = $('#ctl00_ContentArea_taskName').val();
newTask.TaskDescription = $('#ctl00_ContentArea_taskDescription').val();
newTask.SQLObjectID = $('#ctl00_ContentArea_sqlReportingID').val();
newTask.WarehouseSQLObjectID = $('#ctl00_ContentArea_warehouseSQLObjectID').val();
$.ajax({
type: "POST",
url: 'AddTask.aspx/validateTask',
data: JSON.stringify(newTask),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success : function(data) {
alert( data.d );
}
});
});
__
{"Message":"Invalid web service call, missing value for parameter: u0027newTasku0027.","StackTrace":" at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary`2 parameters)rn at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters)rn at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)rn at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}
我尝试过用很多不同的方式来使用我的web方法,例如但不限于:
<System.Web.Services.WebMethod()> _
Public Shared Function validateTask(ByVal newTask As TaskBO)
或者用一堆单独的参数作为字符串。
完成我想做的事情的正确方法是什么?关于格式化JSON对象,我有什么不了解的?
谢谢你的帮助!
web服务需要一个键为"newTask"的项(如方法的参数所示)。您的请求将发送为:
{
"TaskName": "stuff",
"TaskDescription": "stuff",
"SQLObjectID": "stuff",
"WarehouseSQLObjectID": "stuff"
}
但你真的需要它:
{
"newTask": {
"TaskName": "stuff",
"TaskDescription": "stuff",
"SQLObjectID": "stuff",
"WarehouseSQLObjectID": "stuff"
}
}
因此,将您的$.ajax()
呼叫更改为:
data: JSON.stringify({
newTask: newTask
}),
contentType: "application/json; charset=utf-8",
-
如果您使用单独的js文件来运行此代码,请验证客户端ids
-
如果newTask的类上有更多属性,则可以始终使用delete运算符从json对象中排除不必要的属性。(例如:delete newTask.UnecessaryProperty)