MVC 5 无效的 JSON 原语
Posted
技术标签:
【中文标题】MVC 5 无效的 JSON 原语【英文标题】:MVC 5 invalid JSON primitive 【发布时间】:2014-04-17 03:37:30 【问题描述】:我正在尝试在 MVC5 中使用 ajax 编写自动完成功能,但无论我尝试什么,我都会收到错误无效 JSON 原语。 当我手动输入 url localhost:5088/GetData?inpt=[query] 我可以看到返回的 json。
根据我在网上的理解,我给出的“数据:”参数错误。我尝试将它们放入“”,但没有成功。
我的控制器:
public JsonResult GetData(string inpt)
try
var node = //some values here , cause its too long I deleted it
foreach (var node in q)
string scity = node.Attribute("CityName").Value.ToUpper(new CultureInfo("tr-TR", false));
string ccity = node.Attribute("CityCode").Value;
string ccode = node.Attribute("CountryCode").Value;
if (ccity != oldcity)
result.Add(new HavaAlani SehirAdi = scity, HavaAlaniKodu = ccity, HavaAlaniAdi = scity + ", " + ccode, Sehirmi = true );
oldcity = ccity;
result.Add(new HavaAlani SehirAdi = scity, HavaAlaniKodu = node.Attribute("Code").Value, HavaAlaniAdi = node.Value, Sehirmi = false );
catch
return Json(result, JsonRequestBehavior.AllowGet);
我的 JS:
$('input.suggestBox').each(function ()
//$(this).jsonSuggest(air.Lines);
$(this).autocomplete(
source: function (request, response)
$.ajax(
url: "dataAl/GetData",
data: inpt: request.term ,
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
dataFilter: function (data) return data; ,
success: function (data)
response($.map(data.d, function (item)
return
code: item.HavaAlaniKodu,
value: item.HavaAlaniAdi,
iscity: item.Sehirmi
))
,
error: function (XMLHttpRequest, textStatus, errorThrown)
alert(XMLHttpRequest.responseText);
);
,
minLength: 2
).data("ui-autocomplete")._renderItem = function (ul, item)
var cls = "airport";
if (item.iscity)
cls = "city";
return $("<li></li>")
.data("item.autocomplete", item)
.append("<span class='span-" + cls + "'></span>")
.append("<a class='ui-autocomplete-" + cls + "'>" + item.value + " (" + item.code + ")" + "</a>")
.appendTo(ul);
;
);
【问题讨论】:
你能发布一个 JSON 返回的例子吗? 它不返回 JSOn ,它给出警告“无效的 JSOn 原语:inpt”。但它在 head 的标题标签内给出了 html 格式的错误 hmm...这很奇怪,我虽然这个特定的错误源于 jquery,而不是 MVC。如果你在那个动作中设置一个断点,它看起来是否完成了?如果不是,您还可以显示结果声明的位置。还可以尝试将 DataType 更改为“text json”或“text/json” 添加到答案 - 我相信您也需要对数据对象进行字符串化。 【参考方案1】:评论有点长,所以添加这个作为答案-
首先要尝试根据这篇文章修改您的内容类型: MVC JSON method returning invalid JSON to JQuery?
试试“应用程序/json”。
也将你的数据对象包装在
中 JSON.stringify()
如果这不起作用,您能否告诉我您的操作的结果来自哪里?我没有看到声明。还要添加一个断点并确保您可以单步执行该方法。
【讨论】:
在 System.Web.MVC.JSONValueProviderFactory 中设置断点后,我发现我的 'application/json' POST 数据已被 jQuery/ajax 进行 url 编码。为防止这种情况发生,请将选项processData: false
添加到您的请求中,并接受 @Kelly Gendron 的建议并在您的对象上调用 stringify。 MVC 查找 'application/json' 选项并期望它是一个常规的 json 字符串,然后反序列化。
示例:$.ajax( type : 'POST', contentType : "application/json; charset=utf-8", url : 'equipment/GetData', data : JSON.stringify( "start" : $("#startTime").val(), "end" : $("#endTime").val(), "name" : "name" ), processData : false, dataType : 'application/json' )
以上是关于MVC 5 无效的 JSON 原语的主要内容,如果未能解决你的问题,请参考以下文章
消息:无效的 JSON 原语:带有 Webmethod 的 ajax jquery 方法
Jquery DataTable 将参数传递给ajax 调用asp.net。无效的 JSON 原语
ASP.Net MVC 5 Sending Email 错误:根据验证程序,远程证书无效