私は NOOB で、他のユーザーが同様の問題に遭遇したことがわかりましたが、何時間もフラストレーションを感じた後、JSONP コールバック関数を機能させることができません。
Yahoo geo.places から「woeid」情報を抽出しようとしているので、それを使用して場所を指定して気象データを取得できます。フォームの「場所」ID から入力 (郵便番号など) を受け取り、Yahoo に送信します。
コードは、コンソールで xhr.responseText を見ると読み取れる XMLHttpRequest オブジェクトを返していますが、サーバーによってコールバック関数に渡されている JSON オブジェクトを抽出できません。
単純なエラーを犯しているに違いないことはわかっていますが、それが何であるかわかりません。jQuery で $.ajax メソッドを使用してデータを取得する方法を学習する前に、Javascript を使用してこれを実行しようとしています。
エラーがどこにあるか教えていただけますか?これが私のコードです:
// an XMLTHttpRequest
var xhr = null;
/*
* void
* getWoeid()
* gets WOEID from Yahoo geo.places to use in request
* for weather data
*
*/
function getWoeid() {
// instantiate XMLHttpRequest object
try {
xhr = new XMLHttpRequest();
}
catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
// handle old browsers
if (xhr == null) {
alert("Ajax not supported by your browser!");
return;
}
// construct URL
var userinput = document.getElementById("location").value;
var data = encodeURIComponent("select * from" +
" geo.places where text =" + userinput);
var url = "http://query.yahooapis.com/v1/public/yql?q=" + data + "&format=json& callback=callback";
// get data
xhr.onreadystatechange = handler;
xhr.open("GET", url, true);
xhr.send(null);
}
// callback function
function callback(response) {
woeid = response;
}
/*
* void
* handler()
*
* Handles the Ajax response
*/
function handler() {
// only handle loaded requests
if (xhr.readyState == 4) {
// display response if possible
if (xhr.status == 200) {
var location = woeid;
}
else
alert("Error with Ajax call");
}
}