MVC4 ajax调用并正确返回数据

时间:2014-07-16 09:00:03

标签: javascript jquery ajax asp.net-mvc asp.net-mvc-4

我使用下面的ajax在控制器中调用一个动作。

$.ajax({
            type: "POST",
            url: "getUserInfo.json",
            data: "",
            success: function (data) {
                if (data.resultInfo.result != "SUCCESS") { alert("error"); return; }
                setUserInfo(data.userInfo);

                //alert(data.resultInfo.result);
                //alert(data.resultInfo.message);

                settingMenu();
                //historyBackProc(); //histroyback catch
            },
            error: function (data) {
                alert(data.resultInfo.message);
            }
});

最终调用的是这个动作。

public ActionResult getUserInfo()
        {
            if ( Session["UserInfo"] != null ) {
                ViewData.Add("resultInfo", new resultInfo("SUCCESS"));
                ViewData.Add("UserInfo", Session["UserInfo"]);
                return Json(ViewData);
            }
            else
            {
                return RedirectToAction("index.mon");
            }
        }

并回到ajax成功回调,数据不是我想要的。

我想要的是,

data
 - "resultInfo" : object
 - "UserInfo" : object

但它最终只有对象,而不是键。

data
 - object[0]
   - Key : "resultInfo"
   - Value : object
 - object[1]
   - Key : "UserInfo"
   - Value : object

要实现这一点,如何操作动作中的返回对象? 我需要这样做以在JAVA和.NET环境中使用完全相同的javascript运行此Web应用程序。

2 个答案:

答案 0 :(得分:1)

返回JSON时无需使用ViewData。您收到的结果是ViewData是字典。

使用

return Json(new {
    resultInfo = new resultInfo("SUCCESS"),
    UserInfo = Session["UserInfo"]
});

而不是

ViewData.Add("resultInfo", new resultInfo("SUCCESS"));
ViewData.Add("UserInfo", Session["UserInfo"]);
return Json(ViewData);

答案 1 :(得分:0)

        Dim data As New SortedDictionary(Of String, String)
        data.add("key","value")
        data.add("key2","value2")
        Dim serializer As New JavaScriptSerializer()
        Return serializer.Serialize(data)