JQuery.getJSON并使用返回的数据

时间:2011-04-05 14:20:09

标签: jquery asp.net-mvc ajax

我使用了一些修改过的函数,在几个教程中重复使用,或者像某些论坛中的回答一样使用。

问题是,在通话功能之后,什么都没有。我调试它,JavaScript函数调用正确,Controller也正确调用,但我不知道,dropdownlist没有更新。

似乎问题出现在嵌入jQuery.getJSON的函数中,但我不知道如何调试和检查它,或者如何检查数据是否真正从服务器发送或客户端捕获。

JavaScript的:

function ConnectedEndPoint(href, SwitchId) {
        jQuery.ajaxSetup({ cache: false });
        var id = jQuery(href).attr('id');
        var index = '_' + id.split('_')[1] + '_' + id.split('_')[2];
        jQuery.getJSON('/ActiveItem/Switches/ConnectedEndPoint/Switch/' + SwitchId, function (data) {
            var items = "<OPTION>---------------------</OPTION>";
            jQuery.each(data, function (i, _switch) {
                items += "<OPTION value='" + _switch.Value + "'>" + _switch.Text + "</OPTION>";
            });
            jQuery("#item_City" + index).html(items);
        });
    };

控制器:

    class mySwitchBoard
    {
        public string Text { get; set; }
        public string Value { get; set; }
    }

    public JsonResult ConnectedEndPoint(string locality, int id)
        {
            IRepository<Switch> _SwitchRepository = new Repository<Switch>();
            Switch _Switch = _SwitchRepository.Get(id);
            IList<mySwitchBoard> mySB = new List<mySwitchBoard>();
            foreach (SwitchBoard sb in _Switch.Location.ServerRoom.SwitchBoards)
            {
                mySB.Add(new mySwitchBoard() { Text = sb.Name, Value = sb.Id.ToString() });
            }
            Repository).GetAllInServerRoom(2);
            return Json(mySB);
        }

查看是小spagetti代码,但结果是这样的:

<button name="itemUp_0_0" onclick="ConnectedEndPoint(this, 123)" type="button">Up</button><br>
<select id="item_City_0_0" name="item_City_0_0"></select>

2 个答案:

答案 0 :(得分:1)

我相信你对getJSon的调用失败了,因为你试图用它检索的数据是不可序列化的。我知道IList不是,但你的mySwitchBoard应该是。尝试将IList更改为仅列表。

以下代码应该有助于调试

$.ajaxSetup({"error":function(XMLHttpRequest,textStatus, errorThrown) {   
      alert(textStatus);
      alert(errorThrown);
      alert(XMLHttpRequest.responseText);
  }});

答案 1 :(得分:0)

问题在于控制器:

...
JsonResult jr = Json(mySB, JsonRequestBehavior.AllowGet);
...

JsonRequestBehavior未设置为AllowGet