如何使用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'
})