2016-10-01 45 views
1

我試圖獲取具有名稱和位置屬性的對象。我需要位置屬性的座標以在該位置創建標記。但是,運行此代碼會導致未捕獲的SyntaxError:位置1處JSON中的意外令牌o我在我的PUT方法中使用了JSON.stringify(data)。如何從JSON對象中檢索具有座標的變量

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

+3

數據的樣子。添加示例JSON輸出 –

+1

'unexpected token'o''通常意味着您正試圖解析對象而不是JSON文本,即'data'已經從JSON解析到對象。檢查'data'以查看它是否已經是一個對象:'console.log(data)' –

+0

如果不指定dataType屬性,jQuery.ajax會猜測數據類型是什麼。你最好用值'json'來指定它,然後你可以肯定jQuery已經解析了JSON字符串並且傳遞給你一個對象,而不是字符串。 – trincot

回答

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'); } 
     }); 
    } 
1

$.ajax默認dataType設置會猜測響應的類型,並已對其進行分析:

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

The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string).

所以帕特里克·埃文斯提到的,你data已經轉換爲對象,你不需要使用JSON.parse

+0

更好的建議是將數據類型設置爲確定的 – charlietfl