用两个列表返回这个json结果有什么问题

时间:2010-07-02 00:23:22

标签: jquery asp.net-mvc json

我有一个asp.net mvc网站,我想在更改下拉列表时调用服务器。我的代码命中服务器控制器操作,但我从来没有得到回调。我在这里失踪了吗?

这是我的控制器动作:

    public ActionResult LoadTeamsandApplications(int id)
    {
        WorkstreamRoadmapViewModel vm = new WorkstreamRoadmapViewModel();
        vm.Applications = GetAppList(id, 0);
        vm.Teams = GetTeamList(id, 0);
        JsonResult result = Json(vm);
        return result;
    }

注意: GetAppList ()和 GetTeamList ()都返回

 List<SelectListItem>

这是我的jquery代码:

 $("#filter").change(function(e) {

    var filter= $("#filter").val();
    var loadURL = "/List/LoadTeamsandApplications/" + filter;

    $.post(loadURL , function(data) {

        var items = "<option selected></option>";
        $.each(data.Teams, function(i, item) {
            items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
        });
        $("#teamFilter").html(items);

        var items1 = "<option selected></option>";
        $.each(data.Applications, function(i, items1) {
            items1 += "<option value='" + item1.Value + "'>" + item1.Text + "</option>";
        });
        $("#applicationFilter").html(items);

    }, "json");
});

修改

我添加了这段代码:

$(document).ajaxError(function(e, xhr, settings, exception) {
    alert('error in: ' + settings.url + ' \\n' + 'error:\\n' + exception);
}); 

但我得到的只是“错误未定义”

1 个答案:

答案 0 :(得分:1)

有关此问题的几点建议。

确保您的服务器方法返回您期望的数据。您可以轻松编写单元测试,以确保返回包含预期数据的JsonResult。如果做不到这一点,只需调试项目并在return Json(vm);上设置一个断点,以确保方法实际返回。

只是为了调试,尝试通过允许GET简单地转到网址 - 更改return Json(vm);以返回Json(vm, JsonBehaviour.AllowGet);并查看会发生什么。

如果以上内容都很好,请通过JavaScript开始粘贴console.log语句,以确保没有拼写错误等。例如:

    var items = "<option selected></option>";
    console.log(data.Teams);
    $.each(data.Teams, function(i, item) {
        items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
    });
    $("#teamFilter").html(items);

    var items1 = "<option selected></option>";
    console.log(data.Applications);
    $.each(data.Applications, function(i, items1) {
        items1 += "<option value='" + item1.Value + "'>" + item1.Text + "</option>";
    });
    $("#applicationFilter").html(items);

要使控制台正常工作,您需要在Firefox上使用Firebug扩展程序,或者只需在Chrome中调出Developer Console。