使用JSON在另一个域上使用jQuery到MVC App的Ajax POST

时间:2012-02-07 16:57:26

标签: asp.net-mvc json asp.net-mvc-3 jquery post

我正在尝试向MVC应用程序发送AJAX POST请求

    $.ajax({

        type: 'POST',
        dataType: 'json',
        data: {"FirstName":"chris","LastName":"cane"},
        contentType: 'application/json',
        url: "http://dev.irp.com/irp.Ajax.Search/home/Foo",
        success: function (data) {
            alert(data);
        }
    });

此脚本存在于ASP.NET应用程序的其他服务器上。我的MVC应用程序处理代码如下

    [HttpPost]
    public JsonResult Foo(fromclient test)
    {
        var obj = new SearchMemberServiceClient();
        var members = obj.FindMember(test.FirstName, test.LastName, "", "", "", "").Members;

        IEnumerable<Bar> sorted =
            from a in members
            orderby a.FirstName ascending
            group a by new
            {
                a.FormattedFullName,
                a.MembershipsProxy[0].GoodFromDate,
                a.MembershipsProxy[0].GoodThroughDate,
            } into k
            select new Bar
            {
                FormattedName = k.Key.FormattedFullName,
                goodfrom = k.Key.GoodFromDate,
                goodthru = k.Key.GoodThroughDate,
            };
        return Json(sorted.ToList());
    }

public class Bar
{
    public string FormattedName { get; set; }

    public DateTime goodfrom { get; set; }

    public DateTime goodthru { get; set; }
}
public class fromclient
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

问题是脚本需要发布到该URL并获取json数据。但是由于控制器没有任何视图,当我查看客户端的控制台内部时,它会显示网址的404错误,并且说XMLHttpRequest无法加载http://dev.irp.com/irp.Ajax.Search/home/Foo。 Access-Control-Allow-Origin不允许原点http://web-dev.irps.com

我不知道问题是否与ajax请求的url的绝对路径有关。如果是这样我怎么能克服这个?

2 个答案:

答案 0 :(得分:3)

由于浏览器内置same origin policy限制,您无法将AJAX请求发送到不同的域。可能的解决方法是让服务器返回JSONP而不是JSON。您可以在控制器操作中使用自定义JsonpResult的{​​{3}}。

答案 1 :(得分:1)

可以试试JSONP吗?为何选择json?它非常适合跨域。