2013-07-21 1 views
0

У меня есть простой метод, который создает список объектов Team, конвертирует их в Json и затем возвращает.Получение пустого ответа от запроса получения от службы Rest в MVC 4 Asp.net

public ActionResult Index() 
{ 
    var teams = new List<Team>() { 
     new Team{ Name = "Caracas F.C", City = "Caracas", Id = 1}, 
     new Team{ Name = "Millonarios", City = "Bogota", Id = 2}, 
     new Team{ Name = "Independiente", City = "Bogota", Id = 3}}; 

    var jsonData = new { teamsData = teams }; 
    return Json(jsonData, JsonRequestBehavior.AllowGet); 
} 

Когда я иду к этому URL (http://prototypeteam.apphb.com/, проверить это самостоятельно), я могу ясно видеть Json

{ "teamsData": [{ "Id": 1, "Имя »:« Каракас »,« Город »:« Каракас »}, {« Идентификатор »: 2,« Имя »:« Миллонарий »,« Город »:« Богота »}, {« Идентификатор »: 3,« Имя », : "Индепендьенте", "Город": "Богота"}]}

Но когда я пытаюсь получить Json с помощью JQuery он возвращает без ответа:

self.allTeams = ko.observableArray(); 
    $.getJSON("http://prototypeteam.apphb.com/", function (data) { 
     var mappedTeams = $.map(data.teamsData, function (item) { 
      return new TeamViewModel(item); 
     }); 
     self.allTeams(mappedTeams); 
}); 

TeamViewModel = function (data) { 
    self = this; 
    self.Id = data.Id; 
    self.Name = data.Name; 
    self.City = data.City; 
} 

Это то, что я получаю от Firebug от Mozilla.

enter image description here

Если кто-то может мне помочь понять, почему это происходит. Я не понимаю, почему я вижу Json явно на URL, но JQuery, похоже, не понимает, что происходит. Благодарю.

+0

И это все в одном домене, или ваш скрипт не работает из того же домена? – adeneo

+0

Возможно, вам нужно будет явно добавить имя метода в свой вызов, чтобы вернуть Json, а не просто передать URL-адрес. Также попробуйте использовать полный ajax() вместо короткого кода getJson. Затем в ajax() установите тип «post» и передайте пустые данные. – User970008

+0

@adeneo no, это не тот же домен. –

ответ

1

То, что вы видите, является одной и той же политикой происхождения.

У Javascript есть мера безопасности, в которой вы не можете получить контент из внешних URL-адресов, вы можете получать файлы с ajax только из одного домена.

Есть два excepions:

  1. JSONP. Поскольку jsonp на самом деле не является ajax, но вставляет тег скрипта в DOM, как и любой другой тег скрипта, он избегает такой же политики происхождения. Служба должна поддерживать это и обернуть строку json внутри функции, которая выполняется после загрузки скрипта.

  2. CORS. Включение заголовков CORS позволяет использовать сценарии из других доменов, но опять же это нужно установить на сервере.

Там также возможность использовать услугу, как Yahoo YQL или трубы, но это только получает содержание и оборачивает его в любом JSONP или добавляет заголовок CORS, поэтому он использует один из двух вариантов выше.

Такая же политика происхождения применяется везде, даже если вы запускаете все на локальном хосте и пытаетесь получить файл из Интернета, та же самая политика происхождения не позволит этого, поскольку URL-адреса не совпадают.

Смежные вопросы