在jquery-ajax中获取无效的json原语错误

时间:2012-02-16 09:01:29

标签: json jquery

我正在使用Jquery Ajax来调用控制器中的方法,但我总是得到无效的json原语错误。

以下是代码。

客户端代码

$("#something >li").each(function () {
                    widgetsobj.push({
                    WidgetId: $(this).attr("dbid"),
                    ColumnNumber: 2,
                    RowNumber: 3,
                    WidgetType: "Graph",
                    WidgetName: "ddd",
                    PageName : "Page1"
                });
            });

 $.ajax({
            url: "/Home/ABC",
            dataType: "json",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: { pagename1: pagename, widgetsobj1: JSON.stringify(widgetsobj) },
            success: function (data) {
                alert("ss");
            },
            error: function (data) {
                debugger;
            }
        });

在控制器

[HttpPost, ValidateInput(false)]
 public JsonResult ABC(string pagename1, List<XYZ> widgetsobj1)
{

  // do something
}

注意XYZ是具有以下属性的对象。

  • WidgetId

  • ColumnNumber

  • RowNumber

  • WidgetType

  • WidgetName

  • PageName

所以,请让我知道我错在哪里。

2 个答案:

答案 0 :(得分:0)

关于ajax的事情是,你发送的内容非常挑剔。你需要确保一切都是正确的格式。

即。你使用双引号(“)而不是单引号(')等等。

最好的办法是使用Firebug或类似的控制台在执行时查看POST,或者在发送之前使用alert()查看POST数据。这样你就可以确定问题所在。

请记住,当您使用json.stringify()时,它会将您提供的内容转换为它认为可接受的JSON字符串,因为它只是一个字符串,任何时候都可能出现语法错误!

从我在这里看到的内容可能存在以下问题:

data: { pagename1: pagename, widgetsobj1: JSON.stringify(widgetsobj) }

您可能想尝试:

data: { "pagename1": pagename, "widgetsobj1": JSON.stringify(widgetsobj) }

答案 1 :(得分:0)

我得到了同样的错误。我的解决方案是添加:

dataType: 'json',

到ajax电话。看起来你已经在你的ajax电话中有了这个。但希望这有助于其他人。