2012-10-24 12 views
8

Rozejrzałem się i wypróbowałem wiele różnych metod, ale nie mogę przekazać rzeczywistych danych do funkcji kontrolera.Jak zaimplementować połączenie PUT z danymi JSON za pomocą AJAX i JQuery?

Oto kod:

 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 i oldEntry są oba obiekty.

Linia alert wyprowadza ten (z niektóre właściwości usunięty, tylko dla zwięzłość):

{"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}} 

Kiedy debugować moje działania kontrolera („UpdateEntry”), oba parametry są wypełnione domyślnymi parametrami TimesheetEntry klasy (0).

Czy przekazuję to poprawnie?

+0

można rozszerzyć na co masz na myśli mówiąc „Kiedy debugowanie moje działania kontrolera (” UpdateEntry "), dwa parametry są wypełniane domyślnymi parametrami klasy TimesheetEntry (0). "? Czego używasz na serwerze (np. Railsy) i w jaki sposób konwertujesz JSON na serwerze do TimesheetEntry? – InPursuit

+2

Atrybut 'dataType' jest używany tylko w przypadku pobierania danych z serwera. Powinieneś ustawić 'contentType' na' application/json' podczas wysyłania danych do serwera. – InPursuit

+0

Dziękuję InPursuit! To naprawiło to. Czy chcesz dodać tę odpowiedź jako odpowiedź i mogę ją zaakceptować? – Rail24

Odpowiedz

26

Atrybut dataType jest używany tylko w przypadku pobierania danych z serwera. Podczas wysyłania danych na serwer powinieneś ustawić contentType na application/json.

3

Używaj nagłówków: {"X-HTTP-Method-Override": "PUT"} i zastąpić typ POST życzenie. To działa na moim projekcie ...

$.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

Dlaczego używać "POST" jako typu, ale nadpisać go w nagłówkach? – Mese

+0

Spójrz, a zobaczysz, że jako typ nie działa tak, jak powinno być – user1524615

+0

A jak dostać się do kontrolera? – 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' 
}) 

ten pracował dla mnie

Powiązane problemy