2011-02-10 9 views
1

私はデスクトップ上に座っている.htmlファイルでJQuery AJAXを呼び出すことができます。これは、Webサーバー上にあるWCFサービスへの呼び出しをether内で行います。リソースはスクリプトとして解釈されますが、MIMEタイプapplication/jsonで転送されます。 &parsererror

良いニュースは、それが機能することです。ソルタ..ほとんど..全然ではない。

AJAXコールが実行され、FiddlerがWebサービスからのJSON応答を示します。残念ながら、それはすべての方法でブラウザに戻ることはありません。 callback=?があるので、私はクロスサイトスクリプティングエラーを取得しません。

Resource interpreted as script but transferred with MIME type application/json 

成功:コールバックと呼ばれていない、とエラー:コールバックが戻る私はChromeの開発ツールでそれを行う場合(アクセス制御何とか何とか何とか)

は、それは私に次のようなメッセージを与えて開きますstatusTextの単一の単語:parsererror

私はこの一日中私の頭を叩いています。

function AJAXGet() { 
    $.ajax({ 
     url: "http://xxxx/yyyyService/yyyyService.svc/GetZZZ?callback=?", 
     dataType: 'json', 
     data: JSON.stringify('{"customerID": "1"}'), 
     contentType: "application/json; charset=utf-8; application/x-javascript", 
     success: function (data) { 
      alert(data); 
     }, 
     complete: function (data) { 
      alert(data); 
     }, 
     error: function (xhr) { 
      alert("AJAXGetError: " + xhr.statusText); 
     } 
    }); 
} 

フィドラーは、これが送信されたものであると言う: GET /yyyyService/yyyyService.svc/GetZZZ?callback=jQuery150833801421286173_1297309350515&%22{\%22yyyyID\%22:%20\%221\%22}%22&_=1297309350540 HTTP/1。ここで

はWCFです:

[OperationContract] 
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
List<Note> GetNotes(string yyyyID) 

答えて

4

あなたはJSONPを使用している - あなたのサーバー側のコードは、それをサポートしている必要があります。この場合、WCFサービスは[callback name]([json string])など[callback name]([json string])のように返す必要があります。[コールバック名]はjqueryで生成されたjs関数(フィーダー要求でコールバック値として表示されるもの)と[json string]サービスからの通常のJSONデータ。だから、フィドラーでレスポンスをチェックしてください。サービスがJSONP応答を返さない場合は、サービス終了時にそのサポートを追加する必要があります。

.NET 4(JSONPをサポートしています)で行う方法についてはthisの記事を参照してください。 .NET 3.5では、より多くの作業 - JSONPをサポートするWCFを拡張するためのthis MSDN articleを参照してください。さらにもう一つの高速ハッキング(.NET 3.5用)は、リクエストURLにcallbackパラメータがある場合、JSONリクエストを監視してレスポンスを変更するHttpModuleを構築することができます。