Ошибка синтаксического анализатора JQuery ajax в приложении ASP.NET MVC

StackOverflow https://stackoverflow.com/questions/1163864

  •  18-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь вызвать метод действия ASP.NET MVC через метод ajax JQuery.Мой код выглядит следующим образом:

$('.Delete').live('click', function() {
    var tr = $(this).parent().parent();

    $.ajax({
        type: 'DELETE',
        url: '/Routing/Delete/' + tr.attr('id'),
        contentType: 'application/json; charset=utf-8',
        data: '{}',
        dataType: 'json',
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert("Error: " + textStatus + " " + errorThrown);
            alert(XMLHttpRequest.getAllResponseHeaders());
        },
        success: function(result) {
            // Remove TR element containing waypoint details
            alert("Success");
            $(tr).remove();
        }
    });
});

и мой метод действия:

[AcceptVerbs(HttpVerbs.Delete)]
public string Delete(int id)
{
    // Deletion code

    return " ";
}

Я возвращаю пустую строку, поскольку где-то читал, что если длина содержимого равна 0, это может вызвать проблемы. Когда тип возвращаемого значения является строкой, я получаю окно с предупреждением «Ошибка:ошибка не определена», а второе окно предупреждения пусто.

Если я сделаю возвращаемый тип void, я получу предупреждение «Ошибка:parsererror не определен», а второе предупреждение выглядит следующим образом:

Server: ASP.NET Development Server/9.0.0.0
Date: Wed, 22 Jul 2009 08:27:20 GMT
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 1.0
Cache-Control: private
Content-Length: 0
Connection: Close
Это было полезно?

Решение

Я бы не советовал возвращать пустую строку.Поскольку вы установили тип данных в json, jquery оценит ответ.

Вы всегда должны возвращать логическое сообщение.

return Json(new { success = "true" });

N.B внутри успеха, который вы используете $(tr).remove();В этом нет необходимости, поскольку ваша переменная tr уже является объектом jQuery, поэтомуtr.remove будет работать нормально.

Другие советы

Ваш вызов jQuery ожидает Json в ответ на запрос.Так :

[AcceptVerbs(HttpVerbs.Delete)]
public JsonResult Delete(int id) {
    // Deletion code
    return Json("");
}

А еще я согласен с Красная площадь, лучше вернуть логическое сообщение вроде этого:

[AcceptVerbs(HttpVerbs.Delete)]
public JsonResult Delete(int id) {
    // Deletion code
    return Json(new { Success = true });
}

//then in your jQuery function you can check the result this way :
success: function(result) {
    if (result.Success) {
        alert("it was deleted!");
    }
    else {
        alert("something went wrong");
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top