Форма сообщения с предупреждением после обновления 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.