Форма сообщения с предупреждением после обновления jquery

Я обновился до JQuery 1.10.2. Я использую jquery migrate, и у меня появляется предупреждение "jQuery.parseJSON требует допустимой строки JSON"

Я не понял, как я могу это исправить. Может кто-нибудь помочь мне с лучшим решением, как я могу удалить предупреждающее сообщение

Javascript выглядит следующим образом:

 function Search() {

        $.ajax({
            cache: false,
            contentType: "application/json; charset=utf-8",
            dataType: "html",
            url: "@Url.Action("Search")",
            data:  JSON.stringify({myModel: $("#DateFrom").val()}),
            success: function (data)
            {
                $("#NewDiv").html(data);
            },
            error: function (request, status, error)
            {
                  DisplayError(ParseErrorFromResponse(request.responseText, "Unknown error"), true);
            }
        });

 }

В контроллере:

 public PartialViewResult Search(myModel myModel)
    {
        return PartialView("SearchResult", myModel);
    }

ParseErrorFromResponse:

Function ParseErrorFromResponse(responseText, defaultError)
{
    var text = responseText.replace("<title>", "TitleStart");       
    var startIndex = text.indexOf("TitleStart");
    var endIndex = text.indexOf("TitleEnd");
    return (startIndex == -1 || endIndex == -1) ? defaultError : text.substring(startIndex + 10, endIndex);
}

5 ответов

Вы должны отправить свои данные как JSON,

Где у вас есть данные: $("#DateFrom").val()замените его данными: JSON.stringify({$("#DateFrom").val()}),

РЕДАКТИРОВАТЬ: Возможно, вам нужно отправить его как JSON.stringify({(myModel: $("#DateFrom").val()}),

Удалите атрибут content-type и сделайте так:

function Search() {

        $.ajax({
            cache: false,
            url: "@Url.Action("Search","ControllerName")",
            dataType:"html",
            data:
            {
            myModel: $("#DateFrom").val()
            },
            success: function (data)
            {
                $("#NewDiv").html(data);
            },
            error: function (request, status, error)
            {
                  DisplayError(ParseErrorFromResponse(request.responseText, "Unknown error"), true);
            }
        });

 }

и в действии:

 public PartialViewResult Search(string myModel)
    {
        return PartialView("SearchResult", myModel);
    }

Я думаю, это потому, что вы пропустили двойные кавычки вокруг ключевой myModel в строке

...
data:  JSON.stringify({myModel: $("#DateFrom").val()},
...

а не из-за jquery версии upgrade.try, использующей

data:  JSON.stringify({"myModel": $("#DateFrom").val()},

Ошибка может быть связана с "" или же false значения, которые использовались для преобразования в null в версиях JQuery до 1.9.0 на этой странице

Вот соответствующий отрывок, включающий предложенное решение:

JQMIGRATE: jQuery.parseJSON требует допустимой строки JSON

Причина: до jQuery 1.9.0 $.parseJSON() Метод допустил некоторые недопустимые строки JSON и в результате вернул пустое значение, не выдавая ошибку. Это противоречит методу JSON.parse(). Оба метода выровнены по состоянию на 1.9.0, а значения, такие как пустая строка, не считаются действительными $.parseJSON(),

Решение: если вы хотите учитывать такие значения, как "" или же false успешным и рассматривайте их как нулевые, проверьте их перед вызовом $.parseJSON(), Поскольку ложные значения, такие как пустая строка, ранее возвращались как пустые значения без жалоб, в большинстве случаев этого кода будет достаточно:

var json = $.parseJSON(jsonString || "null"); 

Если ваш собственный код не звонит $.parseJSON() напрямую, он, вероятно, использует AJAX для получения значения JSON с сервера, который возвращает пустую строку в теле содержимого, а не действительный ответ JSON, такой как null или же {}, Если невозможно исправить неверный JSON в ответе сервера, вы можете получить ответ в виде текста:

$.ajax({
    url: "...",
    dataType: "text",
    success: function( text ) {
        var json = text? $.parseJSON(text) : null;
        ...
    } 
});

Попробуйте вот так... Вы должны вернуть Json в результате поиска ().

 public JsonResult Search(myModel myModel)
 {
    return Json(result);
 }

а также в вас сценарий, попробуйте, как это..

$.ajax({
        type:"POST"
        cache: false,
        contentType: "application/json; charset=utf-8",
        url: "@Url.Action("Search","ControllerName")",
        dataType: "json",
        data:  JSON.stringify({"myModel": $("#DateFrom").val()}),
        success: function (data)
        {
            $("#NewDiv").html(data);
        }
    });

Также проверьте $("#DateFrom"). Val() имеет правильное значение и введите

alert(data)

в случае успеха и проверьте возвращенные данные.

Я обновил URL.

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