ajax 'PUT' в knockout.js не приводит к успеху

У меня проблема, когда я пытаюсь изменить данные в своей базе данных через knockout.js, используя AJAX 'PUT'.

Если я игнорирую получаемые ошибки и просматриваю данные в базе данных, я вижу, что данные изменены правильно. Эта ошибка - одно, но я не пишу этот вопрос (было бы неплохо узнать об этом). Но я предполагаю, что они связаны.

Реальная проблема заключается в том, что предполагается, что это приведет к успеху, а не к ошибке, так что код ссылается на индекс после сохранения модификации "статьи".

Функция в скрипте knockout.js выглядит следующим образом: (внутри модели представления)

self.saveArticle = function () {

    var isValid = true;

    if (self.articleErrors().length != 0) {
        self.articleErrors.showAllMessages();
        isValid = false;
    }

    if (isValid) {
        $.ajax({
            type: 'PUT',
            cache: false,
            dataType: 'json',
            url: urlFolder + '/UpdateArticleInformation?id=' + self.article().ID,
            data: JSON.stringify(ko.toJS(self.article())),
            contentType: 'application/json; charset=utf-8',
            async: false,
            success: function (data) {
                window.location.href = urlFolder + '/Index';
            },
            error: function (err) {
                var err = JSON.parse(err.responseText);
                var errors = "";
                for (var key in err) {
                    if (err.hasOwnProperty(key)) {
                        errors += key.replace("profile.", "") + " : " + err[key];
                    }
                }
                $("<div></div>").html(errors).dialog({ modal: true, title: JSON.parse(err.responseText).Message, buttons: { "Ok": function () { $(this).dialog("close"); } } }).show();
            },
            complete: function () {
            }
        });
    }
};

Когда я отлаживаю исходный файл.js в chrome, я получаю сообщение об ошибке: Uncaught SyntaxError: Неожиданный конец ввода прямо под следующим в файле.js:

                var err = JSON.parse(err.responseText);

Полная ошибка:

Uncaught SyntaxError: Unexpected end of input Folder.Edit-Article.js:63
self.saveArticle.$.ajax.error Folder.Edit-Article.js:63
x.Callbacks.l jquery-2.0.3.js:2913
x.Callbacks.c.fireWith jquery-2.0.3.js:3025
k jquery-2.0.3.js:7402
x.ajaxTransport.x.support.cors.e.crossDomain.send.t jquery-2.0.3.js:7822
x.ajaxTransport.x.support.cors.e.crossDomain.send jquery-2.0.3.js:7845
x.extend.ajax jquery-2.0.3.js:7301
self.saveArticle Folder.Edit-Article.js:51
(anonymous function) knockout-2.3.0.debug.js:2366
x.event.dispatch jquery-2.0.3.js:4676
x.event.add.y.handle

Когда я регистрирую переменную "err.responseText" получается пустой ("").

Вызов AJAX ссылается на следующий код в моем контроллере:

    [System.Web.Http.HttpPut]
    public HttpStatusCodeResult UpdateArticleInformation(int id, Article articleModel)
    {
        if (ModelState.IsValid)
        {
            db.Entry(articleModel).State = EntityState.Modified;
            db.SaveChanges();
        }
        return new HttpStatusCodeResult(HttpStatusCode.OK);
    }

Как вы можете видеть, я делаю прямое изменение в своей структуре базы данных через сущность (для целей тестирования), и когда я регистрирую переменную "articlemodel", это также показывает, что данные верны для модификации.

Не могу понять это сам...

0 ответов

Другие вопросы по тегам