如何使用AJAX和JQuery使用JSON数据实现PUT调用?

如何使用AJAX和JQuery使用JSON数据实现PUT调用?,jquery,ajax,json,put,Jquery,Ajax,Json,Put,我环顾四周,尝试了许多不同的方法,但似乎无法将实际数据传递给控制器的函数 下面是一些代码: var URL = "/Timesheet/Timesheet/UpdateEntry"; var dataObject = { 'newWeekEntry': newEntry, 'oldWeekEntry': oldEntry }; alert(JSON.stringify(dataObject)); $.ajax({

我环顾四周,尝试了许多不同的方法,但似乎无法将实际数据传递给控制器的函数

下面是一些代码:

        var URL = "/Timesheet/Timesheet/UpdateEntry";

        var dataObject = { 'newWeekEntry': newEntry, 'oldWeekEntry': oldEntry };

        alert(JSON.stringify(dataObject));

        $.ajax({
            url: URL,
            type: 'PUT',    
            data: JSON.stringify(dataObject),
            dataType: 'json',
            success: function(result) {
                alert("success?");
            }
        });
newEntry
oldEntry
都是对象

警报
行输出以下内容(删除一些属性,仅为简洁起见):

当我调试控制器操作(“UpdateEntry”)时,这两个参数将被
TimesheetEntry
类默认参数(0)填充


我是否正确地传递了此信息?

只有在从服务器获取数据时才使用
数据类型属性。向服务器发送数据时,应将
contentType
设置为
application/json

使用标题:
{“X-HTTP-Method-Override”:“PUT”}
并覆盖
POST
请求类型。它对我的项目有效

$.ajax({
    type: 'POST', // Use POST with X-HTTP-Method-Override or a straight PUT if appropriate.
    dataType: 'json', // Set datatype - affects Accept header
    url: "http://example.com/people/1", // A valid URL
    headers: {"X-HTTP-Method-Override": "PUT"}, // X-HTTP-Method-Override set to PUT.
    data: '{"name": "Dave"}' // Some data e.g. Valid JSON as a string
});

这对我来说很有用

你能详细说明一下你说的“当我调试我的控制器操作(“UpdateEntry”)时,这两个参数用TimesheetEntry类默认参数(0)填充”的意思吗?您在服务器上使用什么(即Rails)以及如何将服务器上的JSON转换为TimesheetEntry?只有从服务器获取数据时才使用
dataType
属性。向服务器发送数据时,您应该将
contentType
设置为
application/json
。谢谢您的帮助!这就解决了问题。你想加上这个作为答案,我可以接受吗?当然,很高兴我能帮上忙!为什么使用“POST”作为类型,但在标头中覆盖它?查找后,您将看到作为类型的put无法正常工作,以及如何在控制器中获取类型?这仅适用于理解该标头的服务器,作为缺少对“put”或“DELETE”方法支持的一种解决方法。很糟糕。对不起,我应该说这很糟糕,因为它引入了安全问题。如果你能合法且正确地执行PUT请求,请这样做。谢谢你刚刚救了我的命!:)
$.ajax({
    type: 'POST', // Use POST with X-HTTP-Method-Override or a straight PUT if appropriate.
    dataType: 'json', // Set datatype - affects Accept header
    url: "http://example.com/people/1", // A valid URL
    headers: {"X-HTTP-Method-Override": "PUT"}, // X-HTTP-Method-Override set to PUT.
    data: '{"name": "Dave"}' // Some data e.g. Valid JSON as a string
});
$.ajax({
        url: window.serverUrl + 'student/event/' + eventId,
        type: 'put',
        data: JSON.stringify(data),
        headers: {
            'x-auth-token': localStorage.accessToken,
            "Content-Type": "application/json"
        },
        dataType: 'json'
})