【问题标题】:How to retrieve a variable with coordinates from a JSON object如何从 JSON 对象中检索具有坐标的变量
【发布时间】:2016-10-01 16:09:31
【问题描述】:

我正在尝试获取具有名称和位置属性的对象。我需要 location 属性的坐标来在该位置创建一个标记。然而,运行此代码会导致 Uncaught SyntaxError: Unexpected token o in JSON at position 1。我在 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'); }
		});
	}
}

【问题讨论】:

  • 您的数据是什么样的。添加示例 JSON 输出
  • unexpected token 'o' 通常意味着您正在尝试解析对象而不是 JSON 文本,即 data 已经从 JSON 解析为对象。检查data是否已经是一个对象:console.log(data)
  • 如果您不指定 dataType 属性,jQuery.ajax 会猜测数据类型是什么。您最好使用值json 指定它,然后您可以确定 jQuery 已经解析了 JSON 字符串并传递给您一个对象,而不是字符串。

标签: javascript json leaflet openstreetmap


【解决方案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'); }
      });
    }

【讨论】:

    【解决方案2】:

    $.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

    【讨论】:

    • 更好的建议是确定数据类型
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    相关资源
    最近更新 更多