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", это также показывает, что данные верны для модификации.
Не могу понять это сам...