Backbone.js model fetch: параметры вызывают успех/ошибку/завершенные обратные вызовы, которые не запускаются
Если я ввожу параметры, я не получаю никаких успешных/ошибок/завершенных обратных вызовов, но Fiddler показывает ответ 200, и мои запрошенные json-данные есть. Это ключ. Fiddler показывает, что поездка туда и обратно была успешной, и запрошенные данные здесь находятся на стороне клиента и в хорошем состоянии. Проблема - успех магистрали/отказ/завершение не вызвано. Просто ничего не получай.
При том же базовом URL-адресе, если я выберу параметры (и удаляю их из своего веб-сервиса параллельно), запускаются как успешные, так и завершенные. Ниже приведены параметры "с":
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 ');
})
});
Как может отличаться поведение базовой линии? Это тот же URL-адрес, что и с параметрами или без них.
Я предполагаю, что различие заключается в том, что под капотом в выборке с базой данных сценарий "с" параметров - это сообщение, а параметры "без" - это простой get. Консоль IE отражает это с немного отличающимся выходом.
"С параметрами" моя консоль браузера IE сообщает предупреждение (а не сообщение об ошибке, но предупреждение), что запрос требует CORS:
! SEC7118: XMLHttpRequest для http://example.com/service/myservice.asmx/myoperation?name=Bob&userid=1&usertype=new требуется перекрестный поиск ресурсов (CORS).
Я думаю, что это просто говорит мне "эй, ты сделал запрос на перекрестный поиск, и я пропустил это". "Без" параметров я не получаю этого предупреждения. У меня есть заголовки служб:
Access-Control-Allow-Origin: *
И ответы действительно возвращаются, отражая эту политику.
Итак, вопрос в том, почему не происходит успешное выполнение/ошибка/завершенные обратные вызовы с помощью "параметров"? Данные возвращаются. Не должно ли костяк отражать успех?
Ответы
Ответ 1
Поместите свои методы success
, error
и complete
в один и тот же объект, у вас есть data
. Там должен быть только единственный объект. Под капотом Backbone просто использует метод jQuery ajax()
, поэтому объект, который вы передаете на fetch()
, может использовать любое свойство, которое может быть включено в настройки объект передан в $.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 ');
})
});