2013-08-15 4 views
11

Wenn ich die Parameter einfüge, bekomme ich keine Erfolge/Fehler/Rückrufe, aber Fiddler zeigt eine 200 Antwort und meine angeforderten JSON Daten sind da . Das ist der Schlüssel. Fiddler zeigt, dass die Hin- und Rückreise ein Erfolg war und die angeforderten Daten sind hier clientseitig und in gutem Zustand. Problem ist Rückgrat Erfolg/Fehler/abgeschlossen nicht genannt. Holen Sie sich einfach ein großes Nichts.Backbone.js Modell holen: Parameter verursachen Erfolg/Fehler/abgeschlossene Rückrufe nicht auszulösen

Mit der genau gleichen Basis-URL, wenn ich die Parameter herausnehmen (und sie aus meinem Web-Service parallel entfernen), werden sowohl Erfolg als auch abgeschlossen ausgelöst. Unten ist meine fetch "mit" Parameter:

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 '); 
    }) 
}); 

Wie kann das Backbone-Verhalten anders sein? Es ist die gleiche URL, nur mit oder ohne Parameter.

Ich denke, der Unterschied ist, dass unter der Haube in der Backbone-Abruf, die "mit" Parameter Szenario ist ein Post und die "ohne" Parameter ist eine einfache erhalten. Die IE-Konsole spiegelt dies mit etwas anderer Ausgabe wider.

"Mit" Parameter meine IE-Browser-Konsole meldet eine Warnung (kein Fehler, sondern eine Warnung), dass die Anfrage erforderlich CORS:

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

Ich denke, es ist nur zu sagen "Hey, du hast eine Cross-Origin-Anfrage gemacht und ich lasse es durch". "Ohne" die Parameter bekomme ich diese Warnung nicht. Ich mache die Service-Header gesetzt haben:

Access-Control-Allow-Origin: *

Und die Antworten in der Tat kommen zurück, dass die Politik widerspiegelt.

Also die Frage ist, warum nicht die Backbone-Erfolg/Fehler/vollständige Callbacks "mit" den Parametern auslösen? Die Daten machen es zurück. Sollte das Backbone nicht den Erfolg widerspiegeln?

+0

'fetch' nimmt ein einzelnes Argument. Lesen Sie [this] (http://backbonejs.org/docs/backbone.html#section-55). – fbynite

Antwort

14

Setzen Sie Ihre Methoden success, error und complete in das gleiche Objekt, das Sie haben data. Es sollte nur das einzelne Objekt geben. Unter der Haube verwendet Backbone einfach jQuery's ajax() method, so dass das Objekt, das Sie an fetch() übergeben, eine beliebige Eigenschaft verwenden kann, die in das an $.ajax() übergebene Einstellungsobjekt aufgenommen werden könnte.

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. Vielen Dank. Geänderter Code oben. – Robert