如何从JSON对象检索带有坐标的变量

时间:2016-10-01 16:09:32

标签: javascript json leaflet openstreetmap

我尝试使用名称和位置属性获取对象。我需要location属性的坐标才能在该位置创建标记。然而,运行此代码会导致Uncaught SyntaxError:位于JSON的位置1处的意外标记o。我在PUT方法中使用了JSON.stringify(data)。



function getLocation(){
	var name = $("#username").val();
	console.log('getLocation()');
	if(name != ''){
		$.ajax({
			type:	'GET',
			url:	'../../' + name,
		    async: true,
		    success:function(data){
		    	var oData = JSON.parse(data);
		    	var marker = new L.marker(oData.location);
				marker.addTo(map);
		    	$("#username").val('');
		    },
			error: function(XMLHttpRequest, textStatus, errorThrown) { alert('Not found'); }
		});
	}
}




2 个答案:

答案 0 :(得分:1)

带有默认dataType设置的

$.ajax会猜测响应的类型并解析它:

  

dataType (默认:Intelligent Guess (xml, json, script, or html)

     

您期望从服务器返回的数据类型。如果没有指定,jQuery将尝试根据响应的MIME类型推断它(XML MIME类型将产生XML,在1.4 JSON中将产生一个JavaScript对象,在1.4脚本中将执行脚本,其他任何东西将是以字符串形式返回。)

正如Patrick Evans所说,data已经转换为对象,您不需要使用JSON.parse

答案 1 :(得分:1)

可能是你的结果已经解析了JSON

  function getLocation(){
    var name = $("#username").val();
    console.log('getLocation()');
    if(name != ''){
      $.ajax({
        type: 'GET',
        url:  '../../' + name,
          async: true,
          success:function(data){
            var marker = new L.marker(data.location);
          marker.addTo(map);
            $("#username").val('');
          },
        error: function(XMLHttpRequest, textStatus, errorThrown) { alert('Not found'); }
      });
    }
  }

或者如果你获得了一个数组

  function getLocation(){
    var name = $("#username").val();
    console.log('getLocation()');
    if(name != ''){
      $.ajax({
        type: 'GET',
        url:  '../../' + name,
          async: true,
          success:function(data){
            var marker = new L.marker(data[0].location);
          marker.addTo(map);
            $("#username").val('');
          },
        error: function(XMLHttpRequest, textStatus, errorThrown) { alert('Not found'); }
      });
    }