2016-07-19 2 views
0

поэтому мне нужно нарисовать значки на карте, когда состояние в порядке. Но когда я изменить запрос на AJAX я получилajax vs request openWeatherMap

Неожиданные лексема U в формате JSON в положении 0

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

JS

function displayXML() 
{ 
    if (this.readyState == 4) 
    { 
     proccessResults(); 

     if (this.status == 200) 
     { 
      console.log(this.responseXML); 

     } else { 
      console.log(this.status); 
      alert('Something went wrong') 
     } 
    } 
} 
var getWeather = function(northLat, eastLng, southLat, westLng) { 
    gettingData = true; 
    var requestString = "http://api.openweathermap.org/data/2.5/box/city?bbox=" 
     + westLng + "," + northLat + "," 
     + eastLng + "," + southLat + "," 
     + map.getZoom() 
     + "&cluster=yes&format=json" 
     + "&APPID=" + openWeatherMapKey; 
    var ajax = new XMLHttpRequest(); 
    ajax.open('GET', requestString, true); 
    ajax.onreadystatechange = displayXML; 
    ajax.send(); 
    // request = new XMLHttpRequest(); 
    // request.onload = proccessResults; 
    // request.open("get", requestString, true); 
    // request.send(); 
}; 

var proccessResults = function() { 

    var results = JSON.parse(this.responseText); 
    if (results.list.length > 0) { 
     resetData(); 
     for (var i = 0; i < results.list.length; i++) { 
      geoJSON.features.push(jsonToGeoJson(results.list[i])); 
     } 
     drawIcons(geoJSON); 
    } 
}; 

respone:

{"cod":"200","calctime":0.0007,"cnt":2,"list":[{"id":3082473,"name":"Wejherowo","coord":{"lon":18.23559,"lat":54.605679},"main":{"temp":15.33,"pressure":1012,"humidity":93,"temp_min":15,"temp_max":15.56},"dt":1468456804,"wind":{"speed":0.5,"deg":0},"clouds":{"all":20},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}]},{"id":3099424,"name":"Gdynia","coord":{"lon":18.531879,"lat":54.51889},"main":{"temp":15.3,"pressure":1012,"humidity":93,"temp_min":15,"temp_max":15.56},"dt":1468456816,"wind":{"speed":0.5,"deg":0},"clouds":{"all":20},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}]}]} 
+0

Что ответ данные выглядят как (или скорее, как выглядит JSON, который вы пытаетесь разобрать)? –

+0

Редактировать: это то, что я получаю от ответа –

+0

, но когда я использую запрос, я получаю это, когда я использовал ajax .. так почему он doestn работает –

ответ

0

Функция proccessResults не вызывается никакими параметрами. Он не знает, что такое this (или this.responseText). Вы пытаетесь разобрать строку «undefined» как JSON. Вот откуда исходит ваша ошибка «Неожиданный токен u».

Попробуйте изменить processResults функцию взять параметр:

var proccessResults = function(jsonString) {  
    var results = JSON.parse(jsonString); 
    if (results.list.length > 0) { 
     resetData(); 
     for (var i = 0; i < results.list.length; i++) { 
      geoJSON.features.push(jsonToGeoJson(results.list[i])); 
     } 
     drawIcons(geoJSON); 
    } 
} 

Затем, когда вы ее называете, передаёте this.responseText:

function displayXML(){ 
    if (this.readyState == 4){ 
     proccessResults(this.responseText); 

     if (this.status == 200){ 
      console.log(this.responseXML); 

     } 
     else { 
      console.log(this.status); 
      alert('Something went wrong') 
     } 
    } 
} 
+0

да! работа прекрасна! спасибо! –