2016-10-01 3 views
1

Я пытаюсь получить объект с именем и свойством location. Мне нужны координаты свойства location для создания маркера в этом месте. Выполнение этого кода приводит к тому, что Uncaught SyntaxError: Неожиданный токен o в JSON в позиции 1. Я использовал JSON.stringify (данные) в моем методе PUT.Как получить переменную с координатами из объекта 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

'неожиданный токен 'o'' обычно означает, что вы пытаетесь проанализировать объект, а не текст JSON, то есть' data' уже был проанализирован с JSON на объект. Проверьте 'data', чтобы увидеть, если он уже является объектом:' console.log (data) ' –

+0

jQuery.ajax задумывается над тем, что такое тип данных, если вы не указали свойство' dataType'. Вам лучше указать его со значением '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

 Смежные вопросы

  • Нет связанных вопросов^_^