簡體   English   中英

從MVC 4 Asp.net中的Rest服務獲取請求獲得空響應

[英]Getting empty Response from get request from Rest service in MVC 4 Asp.net

我有一個簡單的方法來創建對象團隊列表,將其轉換為Json然后返回它。

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,“名稱”:“ Caracas FC”,“城市”:“ Caracas”},{“ Id”:2,“名稱”:“ Millonarios”,“城市”: “ Bogota”},{“ Id”:3,“ Name”:“ Independiente”,“ City”:“ Bogota”}]}

但是,當我嘗試使用JQuery獲取Json時,它會返回而沒有響應:

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;
}

這就是我使用Mozilla的Firebug所獲得的。

在此處輸入圖片說明

如果有人可以幫助我了解為什么會這樣。 我不明白為什么我可以在URL上清楚地看到Json,但是JQuery似乎不了解發生了什么。 謝謝。

您看到的是相同的原產地政策。

Javascript具有一種安全措施,您不能從外部URL獲取內容,而只能從同一域獲取具有Ajax的文件。

有兩個例外:

  1. JSONP。 由於jsonp並不是真正的Ajax,而是像其他腳本標記一樣將腳本標記插入DOM,因此避免了相同的原始策略。 服務必須支持此功能,並將json字符串包裝在函數中,腳本加載后即可執行。

  2. CORS。 啟用CORS標頭可讓您使用其他域中的腳本,但是同樣必須在服務器端進行設置。

還可以選擇使用Yahoo YQL或Pipes之類的服務,但這只是獲取內容並將其包裝在JSONP中或添加CORS標頭,因此它使用上述兩個選項之一。

即使您在localhost上運行所有內容並嘗試從Web獲取文件,也可以使用相同的原始策略,因為URL不匹配,因此相同的原始策略將不允許該文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM