2011-03-09 24 views
1

このように見えるASMXサービスを作成しました。ASMXから返されたJSONデータを読み取る

namespace AtomicService 
{ 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    [ScriptService] 
    public class Validation : WebService 
    { 
     [WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
     public string IsEmailValid(string email) 
     { 
      Dictionary<string, string> response = new Dictionary<string, string>(); 
      response.Add("Response", AtomicCore.Validation.CheckEmail(email).ToString()); 
      return JsonConvert.SerializeObject(response, Formatting.Indented); 
     } 
    } 
} 

私はJsonConvert.SerializeObject機能を提供するためにNewtonsoft.Jsonライブラリを使用しています。私のjQueryを介してアクセスフィドラーでの通話や、私はこの応答を取得する場合:このアラートの as seen in google chrome in this case

コードは次のとおりです。

$(document).ready(function() { 
      $.ajax({ 
       type: "POST", 
       url: "http://127.0.0.1/AtomicService/Validation.asmx/IsEmailValid", 
       data: "{'email':'[email protected]'}", 
       contentType: "application/json", 
       dataType: "json", 
       success: function (msg) { 
        if (msg["d"].length > 0) { 
         alert("fish"); 
        } 
        alert("success: " + msg.d); 
       }, 
       error: function (msg) { 
        alert("error"); 
       } 
      }); 
     }); 

そして、私はmsg.dからのデータを見ることができますが、私がすることができますアクセスしないでください。私はResponseが何であるか知りたいです。どうすればそれを得ることができますか?

私のASMXがこれに適したタイプのJSONをすべての作業に返してくれるとは思えません。

誰でも手助けできますか? :)

答えて

4

デシリアライズされたJSONオブジェクトの値の1つとして別のJSONがあるようです。その場合は、あなたの成功のコールバックに、

var data = $.parseJSON(msg.d); 
alert(data.Response); 

を追加してみてください。

更新:この場合、JSONでデータを2回エンコードしています。適切な解決方法についてはthe answer by C. Rossを参照してください。

+0

私の答えをご覧ください。 –

+0

@C。 Ross:オリジナルのポスターよりも、問題の解決方法が早く、ダブルJSONエンコーディングが本当に問題であるかどうかを確認していました。私は自分の答えを更新するように更新します。 – rsp

+0

これは完璧にrspで動作します!どうもありがとう。私はC. Rossの答えについて興味がありますが、あなたは私の元の質問を解決しました。多くのありがとう:) – dooburt

5

@ rspの答えは技術的には正しいですが、実際の問題は、あなたのasmxページで値を二重にエンコードしていることです。

[WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] //This will cause the response to be in JSON 
    public Dictionary<string, string> IsEmailValid(string email) 
    { 
     Dictionary<string, string> response = new Dictionary<string, string>(); 
     response.Add("Response", AtomicCore.Validation.CheckEmail(email).ToString()); 
     return response; //Trust ASP.NET to do the formatting here 
    } 

JavaScriptでデコードする必要はありません。

+0

返信のおかげでC.ロス。私はあなたが提案したようにしています( 'return response;'で '.ToString()'が必要です)。しかし、応答はオブジェクト自体ではなく文字列としてのオブジェクト型です。私は以前のバージョンのサービスでこれを持っていて、シリアライズを提案するブログを見つけましたか? – dooburt

+0

@dooburtリサーチ、研究... –

+0

@dooburt [この質問](http://stackoverflow.com/questions/1791088/asp-net-scriptmethod-generating-empty-json)は、君は。私はそれが辞書の問題であるかどうか疑問に思います... –

関連する問題