2011-04-05 49 views
0

我使用了一些修改后的函数,它在几个教程中重复使用,或者在某些论坛中用于回答。JQuery.getJSON和使用返回的数据

问题是,在通话功能之后,什么也没有发生。我调试它,并且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); 
     } 

View是小通心粉代码,但结果是这样的:

<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> 
+0

那是你的实际代码?因为它看起来像你有一个额外的行,那将是一个JavaScript错误,或至少结束你的功能比你想要的。 – tvanfosson 2011-04-05 14:24:14

+0

对不起,我做了一些复制粘贴后的外观变化,我检查了它 – Zdenek 2011-04-05 14:26:02

+0

您是否尝试过使用FireBug调试Firefox并在getJSON回调中设置断点以查看返回的数据?或IE开发人员工具,但我发现FF/FB更易于使用。 – tvanfosson 2011-04-05 14:29:08

回答

1

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

下面的代码应与调试

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

非常感谢,IList是好的,但是这个javascript函数很有帮助。 – Zdenek 2011-04-06 06:33:23

0

问题是在控制器帮助:

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

JsonRequestBehavior未设置为AllowGet