jquery - JSONP请求成功,但没有返回任何数据

标签 jquery asp.net-mvc-2

我在从我的网站之一检索 JSONP 数据时遇到问题。现场 A 数据由以下 MVC2 Controller 操作提供:

public JsonResult JsonList(string key) {
    var consultants = rep.FindAll().Where(c => c.IsActive).Select(c => new ConsultantJsonItem { Firstname = c.Firstname, Surname = c.Surname });

    return Json(consultants, "application/json");
}

在站点 B 上,我使用 jQuery 检索 JSON,如下所示:

$.ajax({
    url: 'http://www.siteA.com/controller/jsonaction/',
    dataType: 'JSONP',
    crossDomain: true,
    success: function (json) {
        alert("success"); // THIS DISPLAYS
        alert(json); // THIS IS ALWAYS EMPTY
    },
    error: function (xhr, status, error) {
        alert(status); // NOT CALLED
    }
});

我可以在 Firebug 控制台中看到响应以 200 代码正确完成,并且我可以看到响应的内容长度为 11516 字节,但响应选项卡完全是空的,jQuery 不会给我任何数据一起工作。

谁能告诉我这是为什么?

注意:该网站使用的是 jQuery 1.4.2

最佳答案

您返回的 JSON 与 JSONP 不同:

return Json(consultants, "application/json");

事实上,您在客户端设置 dataType: 'JSONP' 只是您需要完成的工作的一半。后半部分在服务器上。

查看 following answer它说明了如何创建自定义 JsonpResult ,它将使用回调查询字符串参数将响应包装到 JSONP 中。

所以:

public class JsonpResult : ActionResult
{
    private readonly object _obj;

    public JsonpResult(object obj)
    {
        _obj = obj;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        var serializer = new JavaScriptSerializer();
        var callbackname = context.HttpContext.Request["callback"];
        var jsonp = string.Format("{0}({1})", callbackname, serializer.Serialize(_obj));
        var response = context.HttpContext.Response;
        response.ContentType = "application/json";
        response.Write(jsonp);
    }
}

然后:

public ActionResult JsonList(string key) 
{
    var consultants = rep.FindAll().Where(c => c.IsActive).Select(c => new ConsultantJsonItem { Firstname = c.Firstname, Surname = c.Surname });
    return new JsonpResult(consultants);
}

在客户端:

$.ajax({
    url: 'http://www.siteA.com/controller/jsonaction/',
    jsonp: 'callback',
    dataType: 'jsonp',
    success: function (json) {
        alert(json);
    }
});

关于jquery - JSONP请求成功,但没有返回任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620305/

相关文章:

jquery - 触发更新面板中控件的单击问题

javascript - 如何拖动掉落的物体?

unit-testing - 单元测试——不能从理论走向实践

c# - 如何在 ASP.NET MVC 定时器上调用函数

asp.net-mvc - 一个 ASP.NET MVC 验证器,用于确保至少选中一个复选框

entity-framework - 在linq查询MVC 2.0中将字符串解析为poco类枚举

php - 修复 jQuery 即时搜索脚本选项卡

jQuery .css() 在 Safari 中无法运行

javascript - 使用 chrome 扩展在 iframe 中注入(inject) javascript

asp.net-mvc - 在 Asp.Net MVC 2 中,有没有更好的方法来返回 401 状态代码而无需进行身份验证重定向