2016-05-19 14 views
0

郵便番号の入力が必要なインターフェイスがあり、入力されたzipに基づいてリモートサイトから経度と緯度をクエリし、以前クエリされた経度と緯度に基づいて一部の人口情報を照会します。私は3つの異なるサイトを照会するために3つのXMLhttpRequest()が必要です。各クエリは、以前にクエリされたデータに基づいて行われます。コード内にコールバックの問題があるかもしれないと思いますが、修正方法はわかりません。複数のクエリを使用したXMLHttpRequest

<input type="submit" value="Get City" onclick="getInfo()"> 

    <script> 
    function getInfo(getGeoCode) { 
     var zipCode = document.getElementById("inputtext").value 

     var xmlReq = new XMLHttpRequest(); 
     xmlReq.open("GET", "http://api.zippopotam.us/us/" + zipCode, true); 
     xmlReq.onreadystatechange = function() { 
      if (xmlReq.readyState == 4) { 
       var temp = JSON.parse(xmlReq.responseText); 
       var lat = temp.places[[0]].latitude ; 
       var logt = temp.places[[0]].longitude; 
       getGeoCode(lat, logt); 
      }; 
     }; 

     xmlReq.send(); 
    } 

    function getGeoCode(lat,logt,getpop) { 
     var nereq = new XMLHttpRequest(); 
     nereq.open("GET", "https://data.fcc.gov/api/block/find?&latitude=" + lat + "&longitude=" + logt + "&showall=false&format=json", true); 
     nereq.onreadystatechange = function() { 
      if (nereq.readyState == 4) { 
       var temp2 = JSON.parse(nereq.responseText); 
       var stateCode = temp2.State.FIPS; 
       var contyCode = temp2.County.FIPS; 
       getpop(stateCode, contyCode); 
      }; 
     }; 
     nereq.send(); 
    } 

    function getpop(stateCode, contyCode) { 
     var nereq2 = new XMLHttpRequest(); 
     nereq2.open("GET", "http://api.census.gov/data/2010/sf1?get=P0010001&for=county:" + contyCode + "&in=state:" + stateCode, true); 
     nereq2.onreadystatechange = function() { 
      if (nereq2.readyState == 4) { 
       var temp3 = JSON.parse(nereq.responseText); 
       document.getElementById("fs").innerHTML = temp3; 
      }; 
     }; 
     nereq2.send(); 
    } 
</script> 
+0

あなたは 'getGeoCode'で三番目の引数を渡していません...ただ、'関数getGeoCode(緯度、LOGT)を使用します'getpop'はグローバルコンテキストの下にあります。あなたは' undefined'を呼び出すことはできません。 – Rayon

+0

promisesと[fetch api](https://developer.mozilla.org/en/docs/Web/API/Fetch_API)を見てください。 –

答えて

0

あなたの関数には、あなたが呼び出した関数名と競合する引数があるため、もはやアクセスできません。

たとえば、getGeoCodeには、getpopという引数があります。 getpopが呼び出されると、その名前の関数は呼び出されませんが、getpop引数が参照する参照を呼び出そうとします。特にこのパーマメーターでは何も渡していないので、間違いの可能性が最も高いです。

ソリューションは、ちょうどgetGeoCode()からgetInfo()からgetGeoCodeパラメータとgetpopパラメータを削除することです:

<input type="submit" value="Get City" onclick="getInfo()"> 

    <script> 
    function getInfo() { 
     var zipCode = document.getElementById("inputtext").value 

     var xmlReq = new XMLHttpRequest(); 
     xmlReq.open("GET", "http://api.zippopotam.us/us/" + zipCode, true); 
     xmlReq.onreadystatechange = function() { 
      if (xmlReq.readyState == 4) { 
       var temp = JSON.parse(xmlReq.responseText); 
       var lat = temp.places[[0]].latitude ; 
       var logt = temp.places[[0]].longitude; 
       getGeoCode(lat, logt); 
      }; 
     }; 

     xmlReq.send(); 
    } 

    function getGeoCode(lat,logt) { 
     var nereq = new XMLHttpRequest(); 
     nereq.open("GET", "https://data.fcc.gov/api/block/find?&latitude=" + lat + "&longitude=" + logt + "&showall=false&format=json", true); 
     nereq.onreadystatechange = function() { 
      if (nereq.readyState == 4) { 
       var temp2 = JSON.parse(nereq.responseText); 
       var stateCode = temp2.State.FIPS; 
       var contyCode = temp2.County.FIPS; 
       getpop(stateCode, contyCode); 
      }; 
     }; 
     nereq.send(); 
    } 

    function getpop(stateCode, contyCode) { 
     var nereq2 = new XMLHttpRequest(); 
     nereq2.open("GET", "http://api.census.gov/data/2010/sf1?get=P0010001&for=county:" + contyCode + "&in=state:" + stateCode, true); 
     nereq2.onreadystatechange = function() { 
      if (nereq2.readyState == 4) { 
       var temp3 = JSON.parse(nereq.responseText); 
       document.getElementById("fs").innerHTML = temp3; 
      }; 
     }; 
     nereq2.send(); 
    } 
</script> 
+0

しかし、質問は、私はvarのtemp2 = JSON.parse(nereq.responseText)にデバッグします。それは私にランタイムエラー – user3491987

+0

を与え、エラーと応答データの詳細を入れるために質問を編集してください。あなたのコメントから、サーバーから受け取ったレスポンスが有効なJSONではないようですが、詳細はなく、ちょうど推測しているようです。 – Rhumborl

+0

はい、APIに問題がある可能性があります。 – user3491987

関連する問題