您无法使用JSON进行跨域AJAX调用。你需要使用JSONP。因此,而不是从你的控制器动作返回一个普通JsonResult编写自定义操作结果将包装JSON在作为参数传递回调:
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 SomeAction()
{
var result = new[]
{
new { Id = 1, Name = "item 1" },
new { Id = 2, Name = "item 2" },
new { Id = 3, Name = "item 3" },
};
return new JsonpResult(balances);
}
现在你可以消耗这个动作跨域:
var url = "http://example.com/SomeController/SomeAction/";
$.getJSON(url + '?callback=?', function (data) {
alert(data);
});
* domain *,* protocol *和* port *必须匹配。否则,请求将落入* SOP *限制之下。 – jAndy 2013-03-11 11:14:43
服务器设置是否正确以返回JSONP响应?在你的例子中,因为你没有指定回调参数,所以发送到服务器的GET参数将被称为'回调'。 – 2013-03-11 11:16:49
所以我们可以使用JSONP ryt? – Apurv 2013-03-11 11:17:24