【问题标题】:MVC JSON method returning invalid JSON to JQuery?MVC JSON方法将无效的JSON返回到JQuery?
【发布时间】:2011-08-15 01:18:58
【问题描述】:

我在使用 Jquery 解析我发回的 JSON 时遇到问题……但是,这很奇怪,因为我使用的是 MVC 的 JSON 方法。

这是我的设置。我有一个非常简单的功能:

$.ajax({
    url: URLd,
    dataType: 'json',
    data: { Year: $('#VehicleYear').val(), Value: request.term },
    success: function (data, textStatus, jqXHR) { alert("Success!"); },
    error: function(XMLHttpRequest, textStatus) {  
        alert(textStatus + ": " + XMLHttpRequest.responseText);  
    }  
});

它总是运行错误函数,显示:

解析器错误:[{"Value":"Toyota","ID":160}]

我不知道为什么它会这样做...... 它使用的是旧版本的 JQuery - 我读到 JQuery JSON 解析器现在更加严格了- 但我无法弄清楚我的 JSON 有什么问题。

即使是错误的,那也很令人沮丧,因为我正在使用 MVC 的 Json 函数来生成这个:

public ActionResult GetVehicleModels(int Year, int MakeID, string Value = null)
{
    var modlMatchs = (from VMYX in ent.VehicleMakeYearXREFs
                        join VM in ent.VehicleModels
                        on VMYX.VehicleModelID equals VM.VehicleModelID
                        join VMa in ent.VehicleMakes
                        on VM.VehicleMakeID equals VMa.VehicleMakeID
                        where VMYX.ModelYear == Year && VMa.VehicleMakeID == MakeID && VM.VehicleModelName.StartsWith(Value)
                        orderby VMa.VehicleMakeName
                        select new { Value = VM.VehicleModelName, ID = VM.VehicleModelID }).Distinct().Take(10).ToList();

    return this.Json(modlMatchs, "application/json", JsonRequestBehavior.AllowGet);
}

我一定遗漏了一些非常明显的东西......仍然掌握了 JQuery/MVC 的窍门,但这些东西确实减慢了我的进步。

果然,JQuery 结果如下(根据 Chrome 的开发者工具栏)

[{"Value":"Toyota","ID":160}]

【问题讨论】:

  • 你能显示正在生成的确切 JSON 吗?
  • @Pekka- 如错误消息所示,但为了清楚起见,我继续添加它。
  • 尝试将 dataType: 'json' 切换为 type: 'text/json'。
  • @Tejs:那没用,但是在您发表评论之前,一所大学建议“文本 json”(不带斜线),这就像一个魅力......我觉得自己像个白痴,但也很恼火这是多么的挑剔......也许我错过了它,但从文档中捕捉到它并不容易。
  • 奇怪,它不应该工作,考虑到text json 不是一个有效的内容类型。但是,不要修复没有损坏的东西!

标签: asp.net-mvc json asp.net-mvc-3 jquery


【解决方案1】:

将 jQuery AJAX 调用中的 dataType 更改为“text json”。我怀疑响应内容类型标头可能存在问题,或者其他导致 jQuery 不将 dataType 确认为 json 的问题。使用“text json”将导致 jQuery 在将其转换为 js 对象之前将其作为纯文本接受。

【讨论】:

    【解决方案2】:
    var parsed = jQuery.parseJSON('[{"Value":"Toyota","ID":160}]');
    

    我刚刚尝试了上述方法,它可以很好地解析它,但请记住它已将它作为数组中的单个记录返回(由于从 C# 返回 IEnumerable)。

    【讨论】:

    • 是的,并不是数据无效——(显然)这是 Chrome 和 IE 处理数据的方式以及它们需要错误的 ContentType 的方式。在此处查看 cmets:api.jquery.com/jQuery.parseJSON(这与 Technoangel 的情况完全相同。)
    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    相关资源
    最近更新 更多