$ .getJSON似乎不起作用

时间:2011-09-05 12:56:13

标签: jquery asp.net-mvc-3

我几乎整天都在看这个问题,我不知道它为什么不起作用。我有以下控制器操作

public JsonResult GetSubCategory(int category) {
            //var subCat = db.categories.Where(c => c.parentID == category).Select(c => new {c.ID, c.codeDesc}).ToList();
            var subCat = from c in db.categories
                         where c.parentID == category
                         select new
                         {
                             ID = c.ID,
                             codeDesc = c.codeDesc
                         };

            return Json(subCat); 
}

我的View文件中有以下jquery方法

$("#catList").change(function () {
    alert("In the change event. cat val is " + $("#catList").val());
    var category = $("#catList").val()
    $.getJSON("/Issues/Search/GetSubCategory", { 'category': category },
        function (data) {
            alert("in the func"); 
            $("#subCatList").options.length = 0; 
            $(data).each(function () {
                $("<option>").val(this.ID).text(this.codeDesc).appendTo("#subCatList");
            });
        });
});

至少我只想显示警告信息,但似乎没有显示。我已经尝试了两种构建subCat对象的方法,如上面的控制器代码所示。调试显示我正在使用ID和codeDesc字段和值生成数据,但View端没有发生任何事情。有人可以帮我搞清楚我做错了什么吗?

由于

5 个答案:

答案 0 :(得分:0)

如果未发生警报,​​则表示JSON调用失败。尝试在JSON调用结束后添加以下内容:

.error(function() {
    alert("JSON call failed");
});

如果您收到该警报,则下一步是确定JSON调用无效的原因。

答案 1 :(得分:0)

可能应该在View文件的第3行末尾添加一个分号。

答案 2 :(得分:0)

返回Json数据以响应get请求的任何操作结果必须具有:

    JsonRequestBehavior.AllowGet

在它的回复声明中。这是MS实施中的故意,通过获取操作结果发布虚假数据来防止与Json相关的攻击。<​​/ p>

所以在你的情况下:

    return Json(subCat,JsonRequestBehavior.AllowGet);

将解决您的问题。

另一方面,另一件会导致这种情况的是你没有返回正确的mime类型,但这通常只适用于你的手编码你的结果处理程序而不是使用MVC。

我的意思是,如果说你准备好返回HTML(并且服务器返回“Content-type:text / html”)那么寻找Json的Ajax请求将以相同的方式静默失败,除非你将响应类型设置为“application / json”

答案 3 :(得分:0)

正如其他建议可能的问题在于你在col中有错误。你可以尝试使用

$.ajax({
  url: "/Issues/Search/GetSubCategory",
  data: { 'category': category },
  success:  function (data) {
            alert("in the func"); 
            $("#subCatList").options.length = 0; 
            $(data).each(function () {
                $("<option>").val(this.ID).text(this.codeDesc).appendTo("#subCatList");
            });,
  error: function(){
          alert('error');
        },
  dataType: "json"
});

如果您看到“错误”,则问题是呼叫不成功

答案 4 :(得分:0)

感谢您的回复。正如我在上面的评论中所说,这是因为我没有用POST选项调用它    同样正如Jonathon和Shawty所说的那样,你也可以表明你想要一个GET来返回结果,但是从我读到的结果来看,这并不安全。 (如果你认为这不是正确的话,我想听听你的意见)。

谢谢