升级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("", "TitleStart"); var startIndex = text.indexOf("TitleStart"); var endIndex = text.indexOf("TitleEnd"); return (startIndex == -1 || endIndex == -1) ? defaultError : text.substring(startIndex + 10, endIndex); }
您需要将数据作为JSON
发送。
你有数据的地方: $("#DateFrom").val()
,用数据替换它: JSON.stringify({$("#DateFrom").val()})
。
编辑:您可能需要将其作为JSON.stringify({(myModel: $("#DateFrom").val()})
发送JSON.stringify({(myModel: $("#DateFrom").val()})
。
该错误可能与用于在每个THIS PAGE 1.9.0
之前的jQuery版本中转换为null
""
或false
值相关
这里是相关的摘录,包括建议的解决方案:
JQMIGRATE:jQuery.parseJSON需要有效的JSON字符串
原因 :在jQuery 1.9.0之前,
$.parseJSON()
方法允许一些无效的JSON字符串并因此返回null而不会引发错误。 这使它与JSON.parse()方法不一致。 这两个方法从1.9.0开始对齐,并且$.parseJSON()
正确地认为空字符串$.parseJSON()
无效。解决方案 :如果要考虑诸如
""
或false
成功的值并将它们视为null,请在调用$.parseJSON()
之前检查它们。 由于诸如空字符串之类的虚假值以前在没有投诉的情况下返回为null,因此在大多数情况下此代码就足够了:
var json = $.parseJSON(jsonString || "null");
如果你自己的代码没有直接调用
$.parseJSON()
,它可能正在使用AJAX从服务器中检索JSON值,该服务器在内容体中返回一个空字符串,而不是有效的JSON响应,如null
或{}
。 如果无法更正服务器响应中的无效JSON,则可以将响应检索为文本:
$.ajax({ url: "...", dataType: "text", success: function( text ) { var json = text? $.parseJSON(text) : null; ... } });
删除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版本升级使用
data: JSON.stringify({"myModel": $("#DateFrom").val()},
尝试这样..你必须从你的Search()返回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。