javascript - 将 JSON 对象发布到 Web 方法 - $.ajax

标签 javascript jquery ajax json

我正在尝试通过单击按钮从表单获取数据,并将其发送到后面代码中的 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: \u0027newTask\u0027.","StackTrace":"   at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary`2 parameters)\r\n   at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters)\r\n   at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

我尝试过以多种不同的方式使用我的网络方法,例如但不限于:

<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",

关于javascript - 将 JSON 对象发布到 Web 方法 - $.ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17752822/

相关文章:

java - 是否可以将图像数据从服务器传输到 html?

javascript - 如何在 React Native 中查看网络请求(用于调试)?

javascript - 尝试在 getElementId 无效的表单中注册后出现弹出窗口

javascript - 你如何在 jQuery 中使用 $ ('document' ).ready(function()) ?

javascript - 如何在 JQuery 语句成功时制作简单的延迟

javascript - 单击滚动到 div(在中心屏幕上显示 div)

javascript - key-focus 在 jquery 插件 DataTables 中不起作用

javascript - JQuery 在表单提交时显示警告消息

php - PHP 中是否有类似 json_encode() 的 xml_encode()?

javascript - 进行多个 AJAX 调用的快速方法