我几乎整天都在看这个问题,我不知道它为什么不起作用。我有以下控制器操作
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端没有发生任何事情。有人可以帮我搞清楚我做错了什么吗?
由于
答案 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来返回结果,但是从我读到的结果来看,这并不安全。 (如果你认为这不是正确的话,我想听听你的意见)。
谢谢