2014-11-10 6 views
0

Попытки это, но получить nothigHTTP GET не получает

function getWeather() { 
$.ajax({ 
    type: "GET", 
    url: "http://api.openweathermap.org/data/2.5/weather?q=London", 
    async: false, 
    jsonpCallback: 'jsonCallback', 
    contentType: "application/json", 
    dataType: 'JSON', 
    success: function(data) 
    { 
     $('#jsonp-results').html(JSON.stringify(data)); 
    }, 
    error: function(e) 
    { 
     alert(e.message); 
    } 

}); 
return data; //The JSON response whould be in this so that I can take this and can do some operation 
} 

На кнопке нажатия он должен вернуть JSON

<body> 
<button onclick="getWeather();">Get Weather</button> 
</body> 

Ожидаемого пример JSON:

{"coord":{"lon":-0.13,"lat":51.51},"sys":{"type":1,"id":5168,"message":0.0287,"country":"GB","sunrise":1415603442,"sunset":1415636293},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"base":"cmc stations","main":{"temp":284.99,"pressure":1003,"humidity":76,"temp_min":283.75,"temp_max":286.15},"wind":{"speed":5.1,"deg":210},"clouds":{"all":75},"dt":1415624678,"id":2643743,"name":"London","cod":200} 

Я не получаю ошибка я сделал.

EDIT

Пробовал с этим из фрагментов приведен здесь:

<!DOCTYPE html> 
<html> 
<body> 
<p id="temp"></p> 
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script> 
<script language="javascript" type="text/javascript"> 
function getWeather() { 
    data_Json = {}; 
    $.ajax({ 
    url: "http://api.openweathermap.org/data/2.5/weather?q=London", 
    dataType: 'JSON', 
    success: function(data) { 
     //alert(JSON.stringify(data)); 
     data_Json = data; 
     //alert("Weather Report: "+data_Json); 
    }, 
    error: function(e) { 
     alert(e.message); 
    } 
    }); 
    return data_Json; 
} 

function temp() { 
    //getWeather(); 
    var obj = JSON.stringify(getWeather()); 
    //alert("Got"+JSON.stringify(obj)); 
    //alert(JSON.stringify(getWeather())); 
    //document.getElementById("temp").innerHTML = obj.main.temp; 
alert("Temp : "+obj); 
    } 
</script> 
</body> 
<body> 
<button onclick="getWeather();">Get Weather</button> 
<button onclick="temp();">Temperature</button> 

</body> 
</html> 

Он вернулся {} не вернулись JSON (возвращение определенно в getWeather) Не температуры (в ПОЛУЧИТЬ элемент по id)

+0

Относящиеся к http://stackoverflow.com/questions/5549068/json-how-do-i-make-cross-domain-json-call –

ответ

1

Вы можете попробовать это решение

function getWeather() { 
data_Json = {}; 
$.ajax({ 
type: "GET", 
url: "http://api.openweathermap.org/data/2.5/weather?q=London", 
async: false, 
dataType: 'JSONP', 
success: function(data) { 
    $('#jsonp-results').html(JSON.stringify(data)); 
    data_Json = data; 
}, 
error: function(e) { 
alert(e.message); 
} 
}); 
return data_Json; } 

Для редактирования части: -

<!DOCTYPE html> 
<html> 
<body> 
<p id="temp"></p> 
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script> 
<script type="text/javascript"> 
function getWeather() { 
    data_Json = {}; 
    $.ajax({ 
     url: "http://api.openweathermap.org/data/2.5/weather?q=London", 
     dataType: 'JSON', 
     success: function (data) { 
      data_Json = JSON.stringify(data); 
     }, 
     error: function (e) { 
      alert(e.message); 
     } 
    }); 
alert(data_Json); 
return data_Json; 
} 
function temp() { 
    var obj = getWeather(); 
    alert("Temp : " +obj); 
} 
</script> 
<button onclick="getWeather();">Get Weather</button> 
<button onclick="temp();">Temperature</button> 

</body> 

+0

См. Edit part, return data_Json фактически ничего не держит, поэтому, когда я выполняю и пытаюсь получить данные из другой функции, это ничего не дает, кроме {} –

0
Hi See this,  
    function getWeather() { 
    var returnData=""; 
    $.ajax({ 
     type: "GET", 
     url: "http://api.openweathermap.org/data/2.5/weather?q=London", 
     async: false, 
     jsonpCallback: 'jsonCallback', 
     contentType: "application/json", 
     dataType: 'JSON', 
     success: function(data) 
     { 
      $('#jsonp-results').html(JSON.stringify(data)); 
      returnData=data; 
     }, 
     error: function(e) 
     { 
      alert(e.message); 
     } 

    }); 
    return data; //The JSON response whould be in this so that I can take this and can do some operation 
    } 
+0

Это показывает неопределенными как предупреждение об опасности –

+0

Эй вы получите данные в функции успеха ? я имею в виду, что вы просто положили предупреждение в успех функции –

1

У вас на самом деле есть элемент с id = "jsonp-results" в вашем html?

Некоторые подсказки для упрощения:

  • Вам не нужно указать JSONP обратного вызова, если вы не используете JSONP
  • синхронные вызовы не хорошо, потому что они блокируют, вы должны избежать этого, и они Арен «т даже поддерживается для вызовов между доменами (которые ваш случай)

Упрощенный пример:

function getWeather() { 
    $.ajax({ 
    url: "http://api.openweathermap.org/data/2.5/weather?q=London", 
    dataType: 'JSON', 
    success: function(data) { 
     $('#jsonp-results').html(JSON.stringify(data)); 
    }, 
    error: function(e) { 
     alert(e.message); 
    } 
    }); 
} 


<body> 
<button onclick="getWeather();">Get Weather</button> 
<div id="jsonp-results"></div> 
</body> 

Ваши комментарии: обязательно работает: http://codepen.io/anon/pen/MYgXzd

У вас должно быть что-то не так в настройках.

+0

ничего не показывает –

+0

Прочтите мое редактирование. – Swonkie

3

Удалить contentType с вашей стороны, и все будет хорошо.

Поскольку это запрос на перекрестный поиск, вы не можете установить contentType.

Ниже ошибка вы увидите в консоли -

XMLHttpRequest не может загрузить http://api.openweathermap.org/data/2.5/weather?q=London. Поле заголовка запроса Content-Type не разрешено в заголовках Access-Control-Allow-Headers.

Также заявление return data; не будет выполнено, поскольку переменные данные недоступны в этом контексте.

Вы можете использовать следующий код для вашей цели -

function getWeather() { 
 
    weatherJson = {}; 
 
    $.ajax({ 
 
    type: "GET", 
 
    url: "http://api.openweathermap.org/data/2.5/weather?q=London", 
 
    async: false, 
 
    jsonpCallback: 'jsonCallback', 
 
    dataType: 'JSON', 
 
    success: function(data) { 
 
     $('#jsonp-results').html(JSON.stringify(data)); 
 
     weatherJson = data; 
 
    }, 
 
    error: function(e) { 
 
     alert(e.message); 
 
    } 
 

 
    }); 
 
    return weatherJson; 
 
}

+0

На самом деле, чтобы иметь возможность запускать скрипт кросс-сайта, вам нужно использовать JSONP. Также см. Http://stackoverflow.com/questions/5549068/json-how-do-i-make-cross-domain-json-call –

+0

return weatherJson возвращает {} не JSON –

+0

@anupam_on Было бы, если async был установлен в true. Но поскольку его синхронный вызов возвращается, произойдет только после вызова функции успеха. – Tushar

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