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