2013-10-04 23 views
3

我已經花了大部分時間試圖找出爲什麼我的jQuery ajax調用我的獨立HTML頁面到跨域ASP.Net MVC Web API調用正在返回正確的JSON數據,但我在我的Ajax調用的錯誤部分中收到以下錯誤消息:jQuery ajax調用跨域返回狀態404即使我可以看到返回的JSON負載

Object {readyState = 4,status = 404,statusText =「error」,more。 ..}

我正在使用jQuery 2.0.3。這裏是我的Ajax調用代碼:

$.ajax 
({ 
    type: "GET", 
    beforeSend: function (xhr, settings) 
    { 
     xhr.setRequestHeader("Authorization", "95d11869-a2ad-4925-8a16-ee23c82909ac"); 
    }, 
    url: url, 
    dataType: "json", 
    processData: false, 
    crossDomain: true, 
    success: function (jsonFromServer) 
    { 
     alert(JSON.stringify(jsonFromServer)); 
    }, 
    error: function (xhr, textStatus, errorThrown) 
    { 
     if (typeof console === 'object' && typeof console.log === 'function') 
     { 
      console.log(xhr); 
      console.log(textStatus); 
      console.log(errorThrown); 
     } 
    }  
}); 

我可以驗證調用我的Web API服務工作兩種不同的方式:通過提琴手,並通過在Firebug的網絡流量的標籤。這兩種方式顯示2個不同的電話給我的服務器:預檢和實際請求。 Fiddler顯示實際的JSON數據結果,並且我已經根據JSLint驗證了它們,並且JSON格式正確。網絡流量標籤頁的第二個條目表示200狀態,但響應爲空。

這裏是我的請求頭:

GET /api/gamelist HTTP/1.1 
Host: local.XXXXXX.com 
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0 
Accept: application/json, text/javascript, */*; q=0.01 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Authorization: 95d11869-a2ad-4925-8a16-ee23c82909ac 
Referer: http://127.0.0.1:52148/index.html 
Origin: http://127.0.0.1:52148 
Connection: keep-alive 

這裏是我的響應頭:

HTTP/1.1 200 OK 
Cache-Control: no-cache, no-store 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/8.0 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Origin: http://127.0.0.1:52148 
X-AspNet-Version: 4.0.30319 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, PUT, GET, DELETE, OPTIONS 
Access-Control-Allow-Credentials: true 
Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With 
Access-Control-Max-Age: 86400 
Date: Fri, 04 Oct 2013 20:22:43 GMT 
Content-Length: 683 

我已經經歷了很多帖子的閱讀和看到的例子,人們說的作品。我不確定我做錯了什麼。有沒有人有任何見解?

UPDATE

我打開Firefox的WebDeveloper網絡工具來監控請求傳輸。我注意到它報告了以下用於與我的服務器的cros域調用:

語法錯誤:JSON.parse:意外的數據結束。

下面是我通過提琴手獲得從我的服務調用返回的JSON數據:

{"Player":{"PersonId":33,"PersonName":"Anonymous User","UserKey":"95D11869-A2AD-4925-8A16-EE23C82909AC","EmailAddress":"unknown"},"GameList":[{"GameId":17,"QuestionTypeId":1,"QuestionTypeName":"Baseball","QuestionId":6,"QuestionName":"Basbeball Team Names","GameTypeId":2,"GameTypeName":"Solo","TotalAvailablePoints":141,"StartDate":"2013-10-04T11:17:10.277","WhosTurnIsItId":33,"WhosTurnName":"Anonymous User"},{"GameId":18,"QuestionTypeId":1,"QuestionTypeName":"Baseball","QuestionId":3,"QuestionName":"World Series Winners","GameTypeId":2,"GameTypeName":"Solo","TotalAvailablePoints":149,"StartDate":"2013-10-04T11:17:10.277","WhosTurnIsItId":33,"WhosTurnName":"Anonymous User"}]} 

我貼這個JSON在JSLint的,它說,它的格式正確無誤。我不確定發生了什麼事。任何見解?

+0

有沒有運氣?有完全相同的問題。 – AGhosT

+0

nope。還沒有運氣。 –

回答

1

我不得不就此問題,以及和解決它,如下所示:

  • 變化從'json'在AJAX的數據類型爲'jsonp'
  • 這個NuGet包添加到Web API項目:WebApiContrib.Formatting.Jsonp
  • 通過調用這個從Global.asax註冊JsonpFormatter

    configuration.Formatters.Insert(0, new JsonpMediaTypeFormatter(configuration.Formatters.JsonFormatter)); 
    

問題是Web API不知道如何說jsonp,這是唯一可用於跨域AJAX調用的數據類型。