2012-07-04 13 views
51

Próbuję zaktualizować rekord w DB, więc definiuję model z danymi i wywołuję metodę .save(). Wywołane zostanie żądanie PUT, a wpis w bazie danych zostanie zaktualizowany. Problem nie jest nazywany wezwaniem do sukcesu lub błędem. Co może być przyczyną?Backbone model.save() nie wywoływanie żadnego błędu lub powodzenia callbacków

sessionsModel.save({ 
    error: function() { 
     alert('test'); 
    }, 
    success: function() { 
     alert('test'); 
    } 
}); 

Edit: Zapytanie zwraca obiekt JSON

+0

Może przyjąć kilka odpowiedzi na to pytanie tak/akceptowane stosunek pozostaje pół – Deeptechtons

+0

można zobaczyć [post] [1] tutaj odpowiedzieć jaśniejsze, to może pomóc [1]: http://stackoverflow.com/questions/15021768/how-to-get-the-error-messages-in-backbone-js –

+0

Otrzymuję ten problem tylko wtedy, gdy uruchamiam moją aplikację internetową na nowo sformatowanym pulpicie (Windows 8), podczas gdy w Starsze laptopy działają bez problemu. Jestem w stanie zobaczyć, jak mój telefon oddzwoni na sukces w starszym laptopie (z Windows 7 dla wszystkich przeglądarek). Gdzie aplikacje oczekują w nowym laptopie z Windows 8 dla wszystkich przeglądarek. – Tarun

Odpowiedz

73

Wystarczy znaleźć podobny problem, gdzie problem został rozwiązany. Musisz umieścić coś jako pierwszy parametr (wstawiam null, ponieważ mój model był już wypełniony danymi jawnie), a obiekt z callbackami jako drugi. Więc coś takiego;

sessionsModel.save(null, {success:function() {} }); 
+0

+1 został właśnie użądlony - czy wiesz, czy ten problem został naprawiony? – James

+0

Napotkaliśmy również ten problem, a ja używam tego kodu, aby w końcu zdać sobie sprawę, że mój backend nie zwraca żadnej odpowiedzi, dlatego nie mogę wywołać sukcesu ani wywołania błędu. Po prostu dodano, bo ktoś zapomniał sprawdzić odpowiedź backendu. :) – lukaserat

23

Podczas poszukiwania na to, po raz pierwszy wylądował na this SO thread który nie działa dla mnie, ale wydawało się działać dla innych, później wpadłem na this link, gdzie ktoś już próbował null zamiast {} jako pierwszy parametr.

this.model.save(null, { 
    success: function (model, response) { 
     console.log("success"); 
    }, 
    error: function (model, response) { 
     console.log("error"); 
    } 
}); 

Tak więc to działało dla mnie. Mam nadzieję, że to ci pomoże.

+0

Jeśli wyewidencjonujesz dokumentację szkieletu, zobaczysz, że save oczekuje wartości pustej dla klucza, pary wartości lub obiektu: http://documentcloud.github.io/backbone/docs/backbone.html # section-56 Wstawianie odpowiedzi Yassera, mam nadzieję, że dokumentacja daje jej trochę jasności. – chaseadamsio

+0

Dzięki - uratowałeś mi ból głowy! – Fijjit

18

Twój serwer musi zwrócić obiekt JSON. Jeśli odpowiedź nie jest obiektem JSON, wywołania zwrotne nie będą uruchamiane. Sprawdź to rozwiązanie https://stackoverflow.com/a/22176044/1579718

+3

Dziwne, ale prawdziwe! – naomi

+4

Wow, to była odpowiedź. Zwróciłem tylko "200 Sukces" bez ciała. Następnie dodano pusty obiekt do odpowiedzi i zadziałało. –

+0

Mam problemy z systemem Windows 8.1, podczas gdy w starszych wersjach systemu działa on bez problemu. Mogłem zobaczyć powodzenie wywołania zwrotnego Backbone.model.save() w starszym systemie operacyjnym (Windows 7 we wszystkich przeglądarkach). Gdzie aplikacje oczekują w Windows 8.1 po uruchomieniu w dowolnej przeglądarce, nawet jeśli typem odpowiedzi jest obiekt JSON. Po wyszukaniu różnych opcji zapisu Backbone.Model i analizy, stwierdziłem, że dodanie parametru dataType: "text", a następnie konwersja odpowiedzi na JSON.parse (odpowiedź) rozwiązuje działanie w Windows 8.1. – Tarun

2

I cierpiał ten problem - ale z trudem, ponieważ mój serwer reaguje z ważnego obiektu JSON (modelu), a ja już korzysta null w moim chyba nazwać.

Tak jak stwierdziłem (ostatecznie), przed wywołaniem oddzwaniania powodzenia, zwracany model przechodzi przez metodę sprawdzania poprawności. W moim przypadku miałem (oczywiste, gdy patrzysz we właściwe miejsce) problem, który spowodował, że zwrócony model został uznany za nieważny, a następnie uniemożliwił oddzwonienie.

Chociaż doceniam to, nie pomaga OP, zamieszczam to w nadziei, że pomoże to komuś innemu mieć ten sam problem.

Powiązane problemy