2016-06-20 6 views
0

私は地図上でAJAX呼び出しでデータを取得しようとしています。しかし、私は次のエラーを受け取ります:SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data。私はconsole.log(dataArray)をやった。問題は、アプリケーションで実装した2つのデータセットが動作して画面に表示されることですが、3番目のデータセットを実装しようとすると、このエラーが発生し、var dataArrayは空のままです。次のエラーを修正する方法:JSON.parse:JSONデータの第1行第1列の予期しないデータ終了?

geojson_popupInfo = { 
    "type": "FeatureCollection", 
    "features": [], 
}; 

geojson_dataTable = { 
    "type": "FeatureCollection", 
    "features": [], 
}; 

var dataArray = data.split(", ;"); 
dataArray.pop(); 

dataArray.forEach(function(d){ 
d = d.split(", "); 

var feature_popupInfo = { 
    "type": "Feature", 
    "properties": {}, 
    "geometry": JSON.parse(d[fieldList.length]) 
}; 

var feature_dataTable = { 
    "type": "Feature", 
    "properties": {}, 
    "geometry": JSON.parse(d[fieldList.length]) 
}; 

for (var i=0; i<fieldList.length; i++){ 
    if ([fieldList[i].show_field] == 't') { 
     feature_popupInfo.properties[fieldList[i].field_alias] = d[i]; 
    } 
    feature_dataTable.properties[fieldList[i].field_name] = d[i]; 
}; 
geojson_popupInfo.features.push(feature_popupInfo); 
geojson_dataTable.features.push(feature_dataTable); 
}); 
console.log(dataArray) 
+0

arrayの各要素が有効なJSONであることを確認してください。 'console.log(JSON.parse(d [fieldList.length]))' –

+0

あなたのAJAX呼び出しを表示できますか?どのようなデータとfieldListのようなものかわからなければ、私たちはあなたを助けることはできません。 –

+0

コード@Tomasz Nguyenを更新しました。しかし、奇妙なことは、他の2つのデータセットが機能し、最後のデータセットが動作しないことです。 (動作していないデータセットはかなり大きいですが、POSTメソッドに問題はありません) –

答えて

1

は、PHPスクリプトは、JSONとのみ JSONを出力していることを確認します。今、あなたがやっている:

echo $attr.", ";

以降を:

2, 1, 0, 0, 0, , 0, 0, [snip], 0, 1840, 0, 2,

以降:

echo json_encode($attribute_names);

だからあなたの出力は、いくつかのコンマ区切りのテキストの両方が含まれています、有効なGeoJSON:

{"type":"MultiPolygon","coordinates":[[[[6.74578464881977, [snip] ,53.3291017450563]]]]}

一度だけリターン(echoのみにGeoJSON、とは、他のどのecho Sを実行していない、とあなたは大丈夫です。

+0

これは間違ったデータではありません。 JSON応答は長いです。したがって、Post AjaxリクエストはJSON全体を返送しません。今私は考えるXamppのJSONの長さを増やす方法を理解する必要があります。 –

1

いいえ。問題は、スクリプトの出力にJSONデータと非JSONデータが混在していることです。スクリプトの出力をJavaScriptで分割すると、JSONも部分的にチャンクされます。その結果、配列dに有効なJSONが含まれなくなりました。

通常、純粋なJSONを返します。あなたのケースでは、テーブルのデータにJSONが含まれているため、難しいです。

次の2つの方法行くことができる:あなたがテーブルからデータを取得する場合、

  1. をJSONをデコードし、デコードされたデータから、オブジェクトの配列を作成し、戻ってJSONにオブジェクトの配列全体をエンコードし、それを返す
  2. また、カンマやセミコロンを使用してデータを区切りますが、「|」などの他の一意の文字や文字列を使用しないでください。 JSONで意味を持たず、データベース内の値ではない「XYZ」です。
関連する問題