2013-08-15 11 views
11

Jeśli umieściłem parametry, nie otrzymuję żadnych sukcesów/błędów/zakończonych wywołań zwrotnych, ale Skrzypek pokazuje odpowiedź 200 i moje żądane dane json są tam . To jest klucz. Fiddler pokazuje, że podróż w obie strony zakończyła się sukcesem, a żądane dane znajdują się tutaj po stronie klienta iw dobrym porządku. Problem to sukces/porażka szkieletu/zakończony niezwany. Po prostu nic wielkiego.Pobieranie modelu Backbone.js: parametry powodują, że powodzenie/błąd/zakończone wywołania zwrotne nie wyzwalają

Przy tym samym bazowym adresie URL, jeśli wyślę parametry (i usuniemy je z mojej usługi internetowej równolegle), uruchomione zostaną zarówno sukcesy, jak i zakończone. Poniżej przedstawiono parametry pobierania "z":

myModel.fetch({ 
    data: { 
     name: 'Bob', 
     userid: '1', 
     usertype: 'new' 
    } 
}, { 
    success: (function() { 
     alert(' Service request success: '); 
    }), 
    error: (function (e) { 
     alert(' Service request failure: ' + e); 
    }), 
    complete: (function (e) { 
     alert(' Service request completed '); 
    }) 
}); 

Jak zachowanie kręgosłupa może być inne? Jest to ten sam URL, tylko z parametrami lub bez nich.

Zgaduję, że różnica polega na tym, że pod maską przy pobieraniu kręgosłupa scenariusz "z" parametrami jest postem, a parametry "bez" są proste. Konsola IE odzwierciedla to z nieco odmiennym wyjściem.

"Z" Parametry konsolę przeglądarki IE zgłasza ostrzeżenie (nie o błędzie, ale ostrzeżenie), że wniosek wymaga CORS:

SEC7118: XMLHttpRequest dla http://example.com/service/myservice.asmx/myoperation?name=Bob&userid=1&usertype=new wymaganej Cross-Origin Resource Sharing (CORS).

Myślę, że to tylko mówienie "hej, złożyłeś prośbę o krzyżowe pochodzenie i przepuściłem to". "Bez" parametrów nie otrzymam tego ostrzeżenia. Mam nagłówki Service Set do:

Access-Control-Allow-Origin: *

A reakcje rzeczywiście wracają odzwierciedla tę politykę.

Pytanie więc, dlaczego sukcesy/błędy/zakończone połączenia zwrotne nie uruchamiają "z" parametrami? Dane powracają. Czy szkielet nie powinien odzwierciedlać sukcesu?

+0

'Fetch' przyjmuje pojedynczy argument. Przeczytaj [to] (http://backbonejs.org/docs/backbone.html#section-55). – fbynite

Odpowiedz

14

Umieść swoje metody success, error i complete w tym samym obiekcie, który masz data. Powinien być tylko pojedynczy obiekt. Pod maską Backbone po prostu używa jQuery's ajax() method, więc obiekt, który przekazujesz do fetch(), może korzystać z dowolnej właściwości, która może być zawarta w obiekcie ustawień przekazywanym do $.ajax().

myModel.fetch({ 
    data: { 
     name: 'Bob', 
     userid: '1', 
     usertype: 'new' 
    }, 
    success: (function() { 
     alert(' Service request success: '); 
    }), 
    error: (function (e) { 
     alert(' Service request failure: ' + e); 
    }), 
    complete: (function (e) { 
     alert(' Service request completed '); 
    }) 
}); 
+0

Bingo. Dzięki wielkie. Zmieniony kod powyżej. – Robert

Powiązane problemy