2016-01-15 4 views
0

Я делаю запрос на Аякс службы WeatherUnderground следующий образ:Uncaught SyntaxError: Неожиданный маркер: в ответ WeatherUnderground

$.ajax({ 
    url : 'http://autocomplete.wunderground.com/aq?query=' + $input.val(), 
    type: 'GET', 
    dataType : "JSONP", 
    success : function(parsed_json) { 
     var obj = JSON.parse(parsed_json); 
     alert(typeof parsed_json); 
     for (var i = 0; i < obj.RESULTS.length; i++) { 
      suggestions[i] = obj.RESULTS[i].name; 
     } 
    }, 
    error : function(parsed_json){ 
     alert('Error'); 
    } 
}); 

Но когда я получаю товару назад я вижу следующее сообщение об ошибке:

неперехваченных SyntaxError: Неожиданный маркер:

И первая линия Быстродействие подчеркнут

{ "RESULTS": [ 
    { 
     "name": "Dakar, Senegal", 
     "type": "city", 
     "c": "SN", 
     "zmw": "00000.1.61641", 
     "tz": "Africa/Dakar", 
     "tzs": "GMT", 
     "l": "https://stackoverflow.com/q/zmw:00000.1.61641", 
     "ll": "14.730000 -17.500000", 
     "lat": "14.730000", 
     "lon": "-17.500000" 
    }, ... 

Что может вызвать эту проблему?

Спасибо заранее!

+1

Что значение '$ input.val() '? – Steve

+0

Все, что я вхожу в текстовое поле. В этом конкретном примере это была буква d. –

ответ

0

Вы используете JSONP означает JSONP (JSON с Padding), он отличается от json. Для получения более подробной информации, пожалуйста, обратитесь к этой ссылке. link: http://json-jsonp-tutorial.craic.com/index.html

Единственное изменение на стороне клиента с JSONP заключается в добавлении параметра обратного вызова в URL-адрес. Самый простой способ сделать это - добавить 'callback =?' в этом случае jQuery будет генерировать уникальное имя функции и передать это серверу.

На сервере вам нужно получить параметр «callback», и вместо того, чтобы возвращать необработанный JSON, вы переносите эту строку в определение функции, например, это «()». Вам не нужно знать имя функции заранее - вы просто получите ее из этого параметра обратного вызова.

Вы также должны установить тип содержимого в «application/javascript», хотя это не имеет значения в моих тестах.

Назад на стороне клиента вы обрабатываете возвращаемую функцию так же, как и исходный объект JSON.

`var url = host_prefix + '/jsonp?callback=?'; 

$.getJSON(url, function(jsonp){ $("#jsonp-response").html(JSON.stringify(jsonp, null, 2)); });

Это поможет вам.

0

также, возможно, стоит отметить, что в случае Wunderground API они обеспечивают параметр обратного вызова, так что вы можете избежать Аякса вообще следующим образом ...

<body> 
<input id="inp"/> 
<input type="button" id="btn" value="Go!"> 
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script> 
<script> 
$("#btn").on("click",getDeets); 

function getDeets(){ 
var str=$("#inp").val(); 
if(document.getElementById("myscr")){ 
document.body.removeChild(document.getElementById("myscr")); 
} 
var scr=document.createElement("script"); 
scr.id="myscr"; 
document.getElementById("myscr").src="http://autocomplete.wunderground.com/aq?query="+str+"&cb=myfunc"; 
document.body.appendChild(scr); 
} 

function myfunc(o){ 
console.log(o); 
} 
</script> 
</body> 
Смежные вопросы