0

私はphpを使用して、html5タグでラップされたjsonデータを生成していますが、jqueryが返すデータ型をどのように認識しているかわかりません。

これがphpです

echo '<section id="stuff">';
echo json_encode($jsonData);
echo '</section>';

セクションタグ内のデータを取得するために、私は自分のデータをこのように扱っています

$.ajax({                                     
      url: 'getdata.php',                         
      data: "",     
      dataType: 'html',                
      success: function(data)         
      {
       var thedata = $(data).filter('#stuff').html();
       var jobject = JSON.parse(thedata);
       for(var i = 0; i < jobject.length; i++) {
   var item = jobject[i];

ここでは、dataType が html になるように指定されていますが、json を指定すると、何も表示されませんが、get は成功します。

次に、jquery get shorthand を使用すると、すべてが機能します。

$.get('getdata.php', function(data) {
       var thedata = $(data).filter('#stuff').html();
       var jobject = JSON.parse(thedata);
       for(var i = 0; i < jobject.length; i++) {
       var item = jobject[i];

jquery の簡略化メソッドは、私の dataType が HTML であると推測しましたか?

4

1 に答える 1

1

dataType は、サーバーからの応答タイプに関するヒントを jQuery に提供します。最初の例では、jQuery は応答がテキスト (スクリプト タグが評価された HTML) であることを期待していますが、データ型で JSON を指定すると、jQuery はこれを変換しようとします。これは失敗します。

後者の例では、jQuery は応答が JSON であると推測し、フィルターを無視して HTML に変換し$(data)、JavaScript オブジェクトとして処理しています。

全体として、サーバーからエンコードしている JSON オブジェクトを HTML 内にカプセル化する理由はないと思います。これは、他のオブジェクトと同様に構造化および解析する必要があります。

<section id="stuff">
'{ "Object": [{"Value" : "1", "Text" : "2 in HTML"},{"Value" : "2", "Text" : "3 in HTML"}] }'
</section>

  var json = '{ "Object": [{"Value" : "1", "Text" : "2"},{"Value" : "2", "Text" : "3"}] }'

   var jobject = JSON.parse(json);
   for(var i = 0; i < jobject.Object.length; i++) {
       var item = jobject.Object[i];
       alert(item.Value);
   }

 var jsonInHtml = $("#stuff").html();

 var jobject = JSON.parse(jsonInHtml);

 // A JavaScript object won't be frmed at this point

for(var i = 0; i < jobject.Object.length; i++) {
       var item = jobject.Object[i];
       alert(item.Value);
 }

フィドル

于 2013-06-22T13:05:09.397 に答える