2012-03-25 6 views
1

別の目を使用することもできます。おそらく私は分かりにくいかもしれません。私はSQL Serverデータベースから基本的なデータを返すWCFサービスを作成しました。それはうまく機能するようです。今、私は単純に、このように私のウェブページにそのデータをダンプしようとしています:WCFからjqueryに返されたjsonpデータに正しくアクセスできません。

<script type="text/javascript"> 
    $.ajax({ url: 'http://localhost:35798/restserviceimpl.svc/json/999?callback=?', 
    dataType: "jsonp", 
    success: function (data) { 
     alert(data); 
     $.each(data, function (i, item) { 
      $('#gallery').append('<p>' + i + '.'+ item + '</p>'); 
     }); 
    } 
    }); 
</script> 

シオマネキを使用して、正しくJSONデータは私のウェブページに戻されている(とアラートがJSONデータに見えるものを私に示してフォーマットするように、それは私には見えますこれはjsonlint.comで検証されます)。しかし、繰り返し処理しようとすると、「レコード」の代わりにそれぞれの「それぞれ」の文字が1つだけ取得されます。 JSON文字列のそれぞれの文字が1つだけ含まれている800回以上の反復が得られます.jsonデータのおよそ17のレコードではなく、それぞれ2つのフィールドがあります。

私のWCFからJSONのように見える文字列が戻ってきたのですか?または上記のjqueryスクリプトにバグがありますか?

答えて

0

まあ、私はWCFエンドまたはjQueryの端に問題があったかどうかわからない、私にエラーを裁判のほぼ2日間を要したが、これは私がなってしまったものですと動作します:

<script type="text/javascript"> 
$(function() { 
    $.ajax({ 
     url: 'http://localhost:35798/restserviceimpl.svc/json/999', 
     type: 'GET', 
     dataType: 'jsonp', 
     success: function (data) { 
      var obj = $.parseJSON(data); 
      $.each(obj, function (i, item) { $('#gallery').append('<p>' + item.Id + '.' + item.Name + '</p>'); }); 
     } 
    }); 
}); 

私が完全に理解していない何らかの理由で、私のWCFサービスから降りてきた 'JSONP'文字列を使用可能なJSONに変換するために$ .parseJSON(データ)行を追加しなければならなかったそれを反復する。それは私のWCFが私のjQueryで補償する必要がある、私は理解する必要がある、多少の不正な結果を送信する可能性があるので、私はこのアプリケーションの他の場所からJSONPを消費し、これを行う必要はなかったので、それが真実ならば、私はちょうどうまくいくものと一緒に行くつもりです。

1
  1. Content-Typeヘッダーの値は? "application/json"にする必要があります
  2. サービスから返されるデータ値は何ですか?それは[a、b]の代わりに "[a、b]"のようなものかもしれません。つまり、全体の文字列が引用符で囲まれていたり、

一般的にスクリプトは良好です。

+0

私はEvgenyのポイント2に同意します。通常、jQueryではアラート(データ)にJSON文字列ではなく[オブジェクトオブジェクト]が表示されます。 –

+0

コンテンツタイプのヘッダーは 'application/x-javqascript'です。これはjsonpにとって正しいと思います。 –

+0

'application/x-javqascript'またはapplication/x-javascript '?とにかく、アラートは文字列ではない[オブジェクトオブジェクト]を表示する必要があります。コンテンツタイプ(application/javascriptまたはapplication/json - どちらでも問題ありません)を試してみることをお勧めします。 –