2012-10-24 34 views
8

Tôi đã xem xét và thử nhiều phương pháp khác nhau, nhưng dường như không truyền dữ liệu thực tế đến chức năng của bộ điều khiển của tôi.Làm thế nào để thực hiện cuộc gọi PUT với dữ liệu JSON bằng AJAX và JQuery?

Dưới đây là một số mã:

 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?"); 
      } 
     }); 

newEntryoldEntry là cả hai đối tượng.

Dòng alert kết quả đầu ra này (với một số đặc tính loại bỏ, chỉ cho ngắn gọn):

{"newWeekEntry":{"MondayHours":2,"TuesdayHours":2,"WednesdayHours":5,"ThursdayHours":5,"FridayHours":"4","SaturdayHours":0,"SundayHours":0},"oldWeekEntry":{"MondayHours":2,"TuesdayHours":2,"WednesdayHours":5,"ThursdayHours":5,"FridayHours":2,"SaturdayHours":0,"SundayHours":0}} 

Khi tôi gỡ lỗi hành động điều khiển của tôi ("UpdateEntry"), hai tham số được làm đầy với các thông số mặc định TimesheetEntry lớp (0).

Tôi có chuyển nó đúng cách không?

+0

Bạn có thể mở rộng vào những gì bạn có nghĩa là khi bạn nói "Khi tôi gỡ lỗi hành động điều khiển của tôi (" UpdateEntry "), hai tham số được lấp đầy với các tham số mặc định của lớp TimesheetEntry (0). "? Bạn đang sử dụng gì trên máy chủ (tức là Rails) và bạn đang chuyển đổi JSON trên máy chủ thành TimesheetEntry như thế nào? – InPursuit

+2

Thuộc tính 'dataType' chỉ được sử dụng khi bạn nhận dữ liệu từ máy chủ. Bạn nên đặt 'contentType' thành' application/json' khi gửi dữ liệu đến máy chủ. – InPursuit

+0

Cảm ơn bạn InPursuit! Điều đó đã sửa nó. Bạn có muốn thêm câu trả lời này làm câu trả lời và tôi có thể chấp nhận nó không? – Rail24

Trả lời

26

Thuộc tính dataType chỉ được sử dụng khi bạn nhận dữ liệu từ máy chủ. Bạn nên đặt contentType thành application/json khi gửi dữ liệu đến máy chủ.

3

Sử dụng tiêu đề: {"X-HTTP-Method-Override": "PUT"} và ghi đè loại yêu cầu POST. Nó hoạt động trên dự án của tôi ...

$.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 
}); 
+0

Tại sao lại sử dụng 'POST' làm loại nhưng ghi đè lên tiêu đề? – Mese

+0

Tra cứu và bạn sẽ thấy rằng đặt như một loại không hoạt động như là – user1524615

+0

Và làm thế nào để có được trong bộ điều khiển của bạn? – ahmedbhs

0
$.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' 
}) 

này làm việc cho tôi

Các vấn đề liên quan