您無法使用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