4

Chromeで適切なデータを返すサービスが1つありますが、FirefoxとIE9ではエラーが発生します。GETは200OKコードを返すように見えますが、それでもエラーコールバックで終了します。私はbackbonejsを介してデータをフェッチしています(jquery.getJsonとajaxを使用すると同じ結果が得られます)。リモートサーバーまたはローカルからデータをフェッチしようとしても、同じ結果が得られます。

Chrome:バージョン23.0.1271.64 m FF:16.0.2 IE9:9.0.8112.16421

wcf:

[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/getData/{name}", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
List<Names> getData(string name);

serviceUrl:

"http://serverABC:4000/myService.svc/getData/test"

javascriptからのフェッチ: バックボーンまたはjqueryGetJson()経由:

$.getJSON("http://serverABC:4000/myService.svc/getData/test", function () {
      alert("success");
  })
  .success(function () { alert("second success"); })
  .error(function (result) {
      console.log('error:', result);
   })

結果: "http:// serverABC:4000 / myService.svc / getData / test 200 OK 70ms"

ヘッダー:

Response Headers
Cache-Control   private
Content-Length  6544
Content-Type    application/json; charset=utf-8
Date    Fri, 16 Nov 2012 14:09:46 GMT
Server  Microsoft-IIS/7.5
Set-Cookie  ASP.NET_SessionId=s3aguluzip0dw135glbxlwwf; path=/; HttpOnly
X-AspNet-Version    4.0.30319
X-Powered-By    ASP.NET
Request Headers
Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection  keep-alive
Host    svgwbip93:4000
Origin  http://localhost:51280
Referer http://localhost:51280/Default.aspx?ReturnUrl=%2f
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0

デバッグの結果:

readyState 0
responseText ""
status 0
**statusText "error"**
abort function()
always function()
complete function()
done function()
error function()
fail function()
getAllResponseHeaders function()
getResponseHeader function()
overrideMimeType function()
pipe function()
progress function()
promise function()
setRequestHeader function()
state function()
statusCode function()
success function()
then function()
toString function()

応答:-は空です(これはおそらく問題です(ただし、Chromeで述べたように、正しいjsonデータを取得しています)

編集1: フィドルで生の応答を取得しようとしましたが、JSONを取得しています。大きな問題は、なぜコールバックがエラーになるのかということです。これが私の生の応答です:

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 29
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
Set-Cookie: ASP.NET_SessionId=kuv3g0r2dgmu5bpaoayj5lic; path=/; HttpOnly
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 16 Nov 2012 19:32:58 GMT

{"PlatformDrawingsResult":[]}

私はjsonを検証しました-それは問題ないようです、それで何が問題になる可能性がありますか....うーん。私はrequirejsも使用していることを言及するのを忘れました(それがいくらかの光をもたらすかどうかはわかりません、..)

乾杯、ミロ

4

1 に答える 1

3

解決策は(jwkeenanに感謝します):

この行をWebサービスの各メソッドの最初に配置すると、すべてのブラウザーが機能するようになります。

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 

そしてそれをie9で動作させるには、これをWebアプリに追加する必要がありました。

$.support.cors = true;
于 2012-11-19T09:17:58.173 に答える