Ajax не работает с wunderground API (сервис Weather для получения информации и отображения) - PullRequest
1 голос
/ 20 августа 2011

Привет!

Я пытаюсь использовать общедоступный API-интерфейс от wunderground (дополнительная информация в [http://wiki.wunderground.com/index.php/API_-_XML][1]) на веб-странице (фактически в виджете для телефона, но для целей тестирования, но с технической точки зрения и написания кода то же самое) .

Основной вопрос заключается в том, что я не смог заставить работать запрос ajax, я пытаюсь использовать простой запрос (без какой-либо библиотеки) и запрос с использованием jquery; как вы можете догадаться: никто не работает.

Я действительно расстраиваюсь из-за этого. Я знаю, что есть тонна информации ajax, но, к сожалению, я получаю больше разочаровывающего понимания, чем меньше, я не нахожу одного конкретного ответа в море информации (например, в Интернете).

Может быть, одна благотворительная душа :) может помочь мне, я копирую и вставляю код: это просто, чтобы только видеть, и для теста вам нужно только скопировать и вставить.

Ну вот и все, спасибо всем! Grettings. Vic

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Test Data</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <script language="javascript" type="text/javascript" src="http://code.jquery.com/jquery-1.6.min.js"></script>
        <script type="text/javascript">
        function tryGet ()
        {
            try
            {
                var xhr = XMLHttpRequest ();
                xhr.open("GET","http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=SABE",true);
                xhr.onreadystatechange = function()
                {
                    if (xhr.readyState == 4) 
                    {
                        if (xhr.status == 200) 
                        {
                            alert(xhr);
                        }
                        else 
                        {
                            ret = "Error code " + xhr.status;
                            alert(ret);
                        }
                    }
                }
                xhr.send(null);
            }
            catch(e)
            {
                alert(e);
            }
        }

        function tryGet2 ()
        {
            //Let's fetch simple.xml using jQuery ajax request
            $.ajax(
            {
                type: "GET",
                url: "http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=SABE", 
                dataType: "xml", 
                success: function(data, textStatus, jqXHR)
                {
                    alert(textStatus);
                }
            });
        }
        </script>
    </head>
    <body>
        <input type="button" value="try get" onclick="tryGet()"/><br/>
        <input type="button" value="try get 2" onclick="tryGet2()"/>
        <div id="content">
            <!-- To put things when things works fine-->
        </div>
    </body>
</html>

Ответы [ 2 ]

1 голос
/ 06 июня 2015

На передней панели вы можете использовать обратный вызов, вот мой способ захвата станций с помощью поиска WU:

var get_city_list =  function(query) {
    $.ajax({
        url: "http://autocomplete.wunderground.com/aq?cb=cb_func&query=" + query,
        type: "GET",
        dataType: "jsonp",
        callback: "cd_func"
    });
}

    window.cb_func = function(result) {
    $.each(result, function(indexInArray, value) {
        $.each(value, function(idx, result) {
            $("<li>")
            .data("name", result.name)
            .addClass("weather-station")
            .text(result.name)
            .appendTo("#search-results");
        });
    });
}
1 голос
/ 21 августа 2011

что вы можете сделать, это

1 создать прокси на стороне сервера

2 вызовите прокси через ajax, и прокси, в свою очередь, вызовет службу погоды

3 получить ответ xml от прокси

4 разобрать и отобразить

вот как вы это делаете в php

создайте файл weather.php и поместите в него следующий код

<?php
header('Access-Control-Allow-Origin: *');
$url = "http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=SABE";
$str = file_get_contents($url);
echo $str;
?>

вызовите weather.php со стороны клиента, как

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$.ajax({
    type:'GET',  
    url:'path/to/weather.php',  
    cache:false,
    dataType:'html',
    success:function(data){         
     xmlDoc = $.parseXML(data),
     $xml = $(xmlDoc),
     $credit = $xml.find('credit').text();
     alert($credit); // alerts Weather Underground NOAA Weather Station
    },
    error:function(jxhr,e){
        console.log(jxhr.status);
        console.log(e.responseText);
    }
});

});

</script>
...