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 原语

MVC 5,无效的令牌

ASP.Net MVC 5 Sending Email 错误:根据验证程序,远程证书无效

ASP.NET MVC 5 - jQuery AJAX 有效,Fetch API 无效

Asp.NET MVC 5 Entity Framework 中的对象名称“dbo.AspNetUsers”无效