2016-07-16 3 views
-1

내 코드가 API에 연결하여 현지 농민 시장 목록을 검색하려고 시도하지만 참조 계속 오류가 발생했습니다. xmlhttp이 40 행에 정의되어 있지 않습니다. 맞춤법 오류가 발생하지 않았으며 가지고 있지 않습니다. 그들이 다른 위치에서 작동하는지 확인하기 위해 코드의 이동 덩어리를 시도.참조 오류가 xmlhttp을 찾을 수 없습니다

<html> 

    <head> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
     <meta charset="UTF-8"> 

     <title>Markets</title> 
     <script> 
      window.onload = function() { 

       function myFunction(arr) { 
        out = "<h1>Markets</h1>"; 
        var i; 
        for (i = 0; i < array.results.length; i++) { 
         out = out + "<em>" + item.marketname + "</em><br>" + details.marketdetails.Address + "</p>" 
         arr.results.forEach(printDetails) 

        } 
        document.getElementById("market_details").innerHTML = out; 
       } 

       var mybutton = document.getElementById("submit_btn") 
       mybutton.onclick = function() { 

        var xmlhttp = new XMLHttpRequest(); 
        var zip = document.getElementById("zip").value 
        var url = "http://search.ams.usda.gov/farmersmarkets/v1/data.svc/zipSearch?zip=" + zip; 

        xmlhttp.onreadystatechange = function() { 
         if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
          var myArr = JSON.parse(xmlhttp.responseText); 
          myFunction(myArr); 
         } 
        } 
       }; 

       xmlhttp.open("GET", url, true); 
       xmlhttp.send(); 
      } 

      itemsProcessed = 0 

      function printDetails(item, index, array) { 

       console.log(item.marketname) 

       var xmlhttp = new XMLHttpRequest(); 
       var url2 = "http://search.ams.usda.gov/farmersmarkets/v1/data.svc/mktDetail?id=" + id; 

       xmlhttp.onreadystatechange = function() { 
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
         var myDArr = JSON.parse(xmlhttp.responseText); 
         details = myDArr 

         //console.log(myDArr.marketdetails) 

        }; 
        xmlhttp.open("GET", url2, true); 
        xmlhttp.send(); 

        itemsProcessed++ 
       } 
      } 

     </script> 
    </head> 

    <body> 
     <h1> Find Your Local Market!<h1> 
    Enter Zip Code:<input id="zip"></p><br> 
    <button id = "submit_btn">Submit</button> 
    <div id="market_details"></div> 
    </body> 
+0

문제가 어떤 줄인지 알고 계시는지 확인하십시오. "40 번 줄"이라고 말하면 아마 아무도 40 번 줄에 셀 수 없을 것입니다. –

답변

1

첫 번째 문제는 당신이 onclick 핸들러 내부에 xmlhttp 정의하는 것입니다 그리고 당신은 핸들러 외부에서 사용

mybutton.onclick = function() { 
    var xmlhttp = new XMLHttpRequest(); //<-- This must be used from inside the current function 
    //Your code here 
    xmlhttp.open("GET", url, true); //<-- put this inside the function 
    xmlhttp.send(); //<-- put this inside the function 
} 

두 번째 문제가있는 onreadystatechange 핸들러 내부 당신 opensendXMLHttpRequest 그 :

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     var myDArr = JSON.parse(xmlhttp.responseText); 
     details = myDArr 

     //console.log(myDArr.marketdetails) 

    }; 

    itemsProcessed++ 
} 
xmlhttp.open("GET", url2, true);//<-- put this outside the onreadystatechange handler 
xmlhttp.send();//<-- put this outside the onreadystatechange handler 

이 정보가 도움이되기를 바랍니다.

+0

고마워요. 내가 제안한 것을 옮겼으므로 더 이상 오류 메시지가 표시되지 않습니다. – Jane123

관련 문제