0

ドキュメントによると、jQuery.extend()は、JSONオブジェクトのディープコピーとシャローコピーの両方を実行するためのソリューションです。ただし、これを使用すると、未定義のオブジェクトエラーが発生します。

私のajaxリクエスト関数とハンドラー:

var tourData;

$.ajax({
  type: "GET",
  url: "includes/phpscripts.php?action=stops",
  dataType: "json", 
  success: (function(data){
    if (data == 'false')
      console.log("Can't load initial panorama");
    else 
      processOptions(data);

  })
});

function processOptions(data){
  tourData = jQuery.extend(true, {}, data);
  console.log(data.length);
  console.log(tourData.length);

}

Firebugでは、data.length6を返します。これは私が期待したものです。ただし、tourDataundefinedを返します。これはtrue、ディープコピーのパラメーターとして使用する場合と使用しない場合で発生します

後でいくつかの関数で使用できるこのリクエストのデータが必要になります。これらの関数は範囲外になります。そのため、応答のクローンを利用できるようにしたいと思います。

内容data

[
  {"fileName":"..\/panos\/photos\/1-prefix_blended_fused.jpg","name":"Start","lat":"43.682211","lon":"-70.450705","heading":"250","width":"1808","height":"653"},
  {"fileName":"..\/panos\/photos\/2-prefix_blended_fused.jpg","name":"Second","lat":"43.6822","lon":"-70.450769","heading":"250","width":"1600","height":"578"},
  {"fileName":"..\/panos\/photos\/2-prefix_blended_fused.jpg","name":"Second","lat":"43.6822","lon":"-70.450769","heading":"250","width":"1600","height":"578"},
  {"fileName":"..\/panos\/photos\/3-prefix_blended_fused.jpg","name":"Third Stop","lat":"43.682219","lon":"-70.450828","heading":"250","width":"1821","height":"627"},
  {"fileName":"..\/panos\/photos\/4-prefix_blended_fused.jpg","name":"Fourth Stop","lat":"43.68218","lon":"-70.450887","heading":"250","width":"1600","height":"800"},
  {"fileName":"..\/panos\/photos\/5-prefix_blended_fused.jpg","name":"Last Stop","lat":"43.682165","lon":"-70.450933","heading":"250","width":"1808","height":"673"}
]
4

1 に答える 1

2

あなたdata.lengthは6だと言います。これは私にそれdataがオブジェクトではなく配列であると思わせます。

dataオブジェクトではなく、配列です。

$.extend配列で機能しますがlength、オブジェクトに変換されるため、プロパティは存在しなくなります。

var data = [{a:12}, {a:13}, {a:14}];
console.log(data.length); // 3
data = $.extend(true, {}, data);
console.log(data); // {0:{a:12}, 1:{a:13}, 2:{a:14}}
console.log(data.length); // undefined
于 2012-06-15T19:57:38.920 に答える