XMLHttpRequest ничего не возвращает? - PullRequest
1 голос
/ 27 марта 2012

Я пишу небольшую программу на JavaScript, которая выполняет веб-вызовы для получения информации о погоде, когда пользователь нажимает на карту.Это мой код:

    //get the three letter airport code
    var text = kmlEvent.featureData.name;

    //service to get woeid
    var woeid_url = 'http://where.yahooapis.com/geocode?name=';
    xmlhttp = new XMLHttpRequest();
    //has to be sync, since next request depends on it
    xmlhttp.open('POST', woeid_url + text, false);
    xmlhttp.send(null);
    //now we get the relevent info from the XML
    xmlDoc = xmlhttp.responseXML;
    woeid_xml = xmlDoc.getElementsByTagName('woeid');
    //parse the xml and get the woeid
    woeid = woeid_xml[0].childNodes[0].nodeValue;

    //with the woeid found, we can make the weather request
    weatherhttp = new XMLHttpRequest();
    var weather_url = 'http://weather.yahooapis.com/forecastrss?w=' + woeid + '&u=f';
    //this is async
    weatherhttp.open('POST', weather_url, true);
    weatherhttp.onreadystatechange = function() {
        if (weatherhttp.readyState == 4) {
        alert(weatherhttp.status);
        }
    }
    weatherhttp.send(null);

Он звонит в Yahoo, чтобы узнать, где находится пользователь.Это работает, и я получаю горе просто отлично.Однако, когда я делаю второй вызов метеорологической службе, он ничего не возвращает и 0 в качестве кода состояния.

Если я изменю вторую часть на синхронизацию вместо асинхронной, я все равно получу ту же ошибку.Кто-нибудь видит, что я делаю не так?Если я скопирую weather_url в свой браузер, он загружается просто отлично.Я не понимаю, почему первая часть работает, но не вторая.Я очень плохо знаком с JavaScript и AJAX, поэтому действительно не знаю, что делаю.

Используемый мной браузер - FireFox, если это помогает.

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Я бы настоятельно рекомендовал использовать такую ​​среду, как Prototype или JQuery, поскольку вы сказали, что вы новичок в JS, особенно когда речь идет о AJAX.Они оба отлично сгладили и упростили для вас вещи.

Я полагаю, что из-за отсутствия данных ваш запрос пытается загрузить данные из другого домена - см. Одинаковая политика происхождения .Протестируйте загрузку чего-либо в своем домене, чтобы увидеть, действительно ли это проблема.

Держитесь подальше от синхронных вызовов AJAX!В идеале вы должны делать то, что зависит от ответа на первый запрос, как только вы получите данные, обычно в режиме обратного вызова.Опять же, это то, что фреймворки позволят вам легко выполнить: Проверьте 'onSuccess' здесь

0 голосов
/ 27 марта 2012

Попробуйте использовать GET вместо POST в качестве метода.Согласно документации :

Веб-служба PlaceFinder поддерживает только метод HTTP GET.Другие методы HTTP не поддерживаются.

Вы также можете сравнить вызовы, используя прокси-сниффер, такой как Fiddler , чтобы увидеть, есть ли различия между успешным вызовом, сделанным вручную в браузере, по сравнению ссгенерированный через AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...