Javascript 使用jQuery 1.5.1和ASP.NET MVC V3获取JSON失败

Javascript 使用jQuery 1.5.1和ASP.NET MVC V3获取JSON失败,javascript,asp.net,json,jquery,Javascript,Asp.net,Json,Jquery,在我的javascript中,我尝试调用ASP.NET MVC V3框架的控制器方法,实际上我尝试了以下两种解决方案: $.get('/Controller/Method', tourID, function (data) { $.each(data, function (index, listelement) { ...do something with listelement }); }, "json"); $.getJSON('/Controller/Meth

在我的javascript中,我尝试调用ASP.NET MVC V3框架的控制器方法,实际上我尝试了以下两种解决方案:

$.get('/Controller/Method', tourID, function (data) {
    $.each(data, function (index, listelement) {
     ...do something with listelement
    });
}, "json");


$.getJSON('/Controller/Method', null, function (data) {
    $.each(data, function (index, listelement) {
     ...do something with listelement
    });
}); 
我的控制器方法如下所示:

public JsonResult GetList(int id)
{
    Object obj = repository.GetObject(id);
    // obj.Stuff is an EntityCollection
    return Json(obj.Stuff, JsonRequestBehavior.AllowGet);
}
$.get('/Controller/Method', {id: tourID}, function (data) {
    $.each(data, function (index, listelement) {
     ...do something with listelement
    });
}, "json");
我的问题是,不会调用控制器函数(我在这里设置了一个断点)。如果我删除参数“id”,它可以被调用,但是“$.each…”部分不会被执行。如何调试javascript和ASP.NET之间的交互,这里出了什么问题

提前感谢并致以最良好的问候


Artjom

我不能完全确定ASP.NET MVC是如何接收参数的,但是您不能仅仅将一个数字作为
数据
参数传递给
$。get
。您需要提供
key=value
对,然后由服务器端代码解释并传递给控制器方法

这可能看起来像这样:

public JsonResult GetList(int id)
{
    Object obj = repository.GetObject(id);
    // obj.Stuff is an EntityCollection
    return Json(obj.Stuff, JsonRequestBehavior.AllowGet);
}
$.get('/Controller/Method', {id: tourID}, function (data) {
    $.each(data, function (index, listelement) {
     ...do something with listelement
    });
}, "json");
jQuery将采用
{id:tourID}
并将其转换为键值对(这里类似于
id=5
并将其作为查询字符串附加到URL


如果您只传递一个数字,jQuery将向服务器发送一个空字符串作为查询字符串,因此您的服务器将不会收到信息。

我不完全确定ASP.NET MVC如何接收参数,但您不能只传递一个数字作为
数据
参数到
$。get
。您需要提供
key=value
pairs,然后由服务器端代码解释并传递给控制器方法

这可能看起来像这样:

public JsonResult GetList(int id)
{
    Object obj = repository.GetObject(id);
    // obj.Stuff is an EntityCollection
    return Json(obj.Stuff, JsonRequestBehavior.AllowGet);
}
$.get('/Controller/Method', {id: tourID}, function (data) {
    $.each(data, function (index, listelement) {
     ...do something with listelement
    });
}, "json");
jQuery将采用
{id:tourID}
并将其转换为键值对(这里类似于
id=5
并将其作为查询字符串附加到URL


如果您只传递一个数字,jQuery将向服务器发送一个空字符串作为查询字符串,因此您的服务器将不会收到信息。

如果JavaScript执行时没有错误,则消息实际上会发送到您的服务器,并且实际上会收到响应。但是,如果您的参数与如果控制器操作失败,或者存在其他问题,您将从服务器收到一条错误消息的响应。很可能是HTML格式的内容向您提供了有关失败的信息


由于在调用操作之前发生错误,您可能未命中断点。请检查您实际收到的响应的详细信息。

如果JavaScript执行时没有错误,则消息实际上被发送到您的服务器,并且实际上正在接收响应。但是,如果您的参数不匹配有了控制器操作的签名,或者出现了其他问题,您将从服务器收到一条错误消息的响应。很可能是HTML格式的内容向您提供了有关故障的信息


由于在调用操作之前发生错误,您可能未命中断点。请检查您实际收到的响应的详细信息。

我使用Firebug插件查找问题。由于循环依赖关系,我试图在controller方法中返回的列表无法序列化。我通过添加[ScriptIgnore]属性设置为相应实体类的导航属性。

我使用Firebug插件查找问题。由于循环依赖关系,我试图在控制器方法中返回的列表无法序列化。我通过添加[ScriptIgnore]解决了此问题属性设置为相应实体类的导航属性。

您缺少一个引号来关闭
/Controller/Method
@kjy112这显然不是实际的代码,因此我认为这只是一个输入错误。@lonesomeday也许…也许!您缺少一个引号来关闭
/Controller/Method
@kjy112这是显而易见的不是实际的代码,所以我认为这只是一个输入错误。@lonesomeday也许…也许!根据路由的设置方式,您也可以尝试$.get('/Controller/Method/'+tourID,null,function(data){}@Todd)。问题是,目前根本没有发送任何数据…+1,以获得带有{id:tourID}的提示。它解决了调用包含“id”参数的控制器操作的问题,并且根据路由的设置方式,您也可以尝试$.get('/controller/Method/'+tourID,null,function(data){}@Todd)。问题是,目前根本没有发送任何数据…+1以获取带有{id:tourID}的提示。它解决了调用包含“id”参数的控制器操作的问题