我正在尝试向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的绝对路径有关。如果是这样我怎么能克服这个?
答案 0 :(得分:3)
由于浏览器内置same origin policy限制,您无法将AJAX请求发送到不同的域。可能的解决方法是让服务器返回JSONP而不是JSON。您可以在控制器操作中使用自定义JsonpResult
的{{3}}。
答案 1 :(得分:1)
可以试试JSONP吗?为何选择json?它非常适合跨域。