Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 同一项如何在一个实例中未定义,而在另一个实例中定义_Javascript_Html - Fatal编程技术网

Javascript 同一项如何在一个实例中未定义,而在另一个实例中定义

Javascript 同一项如何在一个实例中未定义,而在另一个实例中定义,javascript,html,Javascript,Html,4天了,但还是没弄明白。下面的脚本将计算每个州从起点到终点的行驶里程。 如果您的路线经过多个州,则该表将填充两个字母的州缩写,并在第2列中填充该州的英里数。但是,如果您的路线处于相同的状态,则里程会正确计算并显示在表的第2列中,但第1列中不会显示2个字母的状态缩写,而是显示为“未定义”。当两个或多个状态进入时,如何定义它;如果只有一个状态进入,如何定义它。在这两种情况下不应该是这样或那样吗 <!DOCTYPE html> <html lang="en">

4天了,但还是没弄明白。下面的脚本将计算每个州从起点到终点的行驶里程。 如果您的路线经过多个州,则该表将填充两个字母的州缩写,并在第2列中填充该州的英里数。但是,如果您的路线处于相同的状态,则里程会正确计算并显示在表的第2列中,但第1列中不会显示2个字母的状态缩写,而是显示为“未定义”。当两个或多个状态进入时,如何定义它;如果只有一个状态进入,如何定义它。在这两种情况下不应该是这样或那样吗

<!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <meta name="generator" content="CoffeeCup HTML Editor (www.coffeecup.com)">
        <meta name="dcterms.created" content="Tue, 03 May 2016 17:18:33 GMT">
        <meta name="description" content="">
        <meta name="keywords" content="">
        <title></title>

        <!--[if IE]>
        <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->


      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>

    <script src="https://maps.googleapis.com/maps/api/js?key= &callback"></script>
    <body>
    <div id="map" style="height:400px"></div>
    <div id="status"></div> 
    <div id="results"></div>
    <div id="table"></div>


    <div style=" text-align: left; text-indent: 0px; padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px;">
    <table>
       <table width="40%" border="1" cellpadding="2" cellspacing="2" style="border-color: #000000; border-style: solid; background-color: #ffffff;">
          <tr valign="top">
             <td  style="border-color : #000000 #000000 #000000 #000000; border-style: solid;" class="state1"><br />
             </td>
             <td  style="border-color : #000000 #000000 #000000 #000000; border-style: solid;" class="mile1"><br />
             </td>
             <tr valign="top">
             <td  style="border-color : #000000 #000000 #000000 #000000; border-style: solid;" class="state2"><br />
             </td>
             <td  style="border-color : #000000 #000000 #000000 #000000; border-style: solid;" class="mile2"><br />
             </td>
             <tr valign="top">
             <td  style="border-color : #000000 #000000 #000000 #000000; border-style: solid;" class="state3"><br />
             </td>
             <td  style="border-color : #000000 #000000 #000000 #000000; border-style: solid;" class="mile3"><br />
             </td>

             <tr valign="top">
             <td  style="border-color : #000000 #000000 #000000 #000000; border-style: solid;" class="state4"><br />
             </td>
             <td  style="border-color : #000000 #000000 #000000 #000000; border-style: solid;" class="mile4"><br />
             </td>
             <tr valign="top">
             <td  style="border-color : #000000 #000000 #000000 #000000; border-style: solid;" class="state5"><br />
             </td>
             <td  style="border-color : #000000 #000000 #000000 #000000; border-style: solid;" class="mile5"><br />
             </td>
             <tr valign="top">
             <td  style="border-color : #000000 #000000 #000000 #000000; border-style: solid;" class="state6"><br />
             </td>
             <td  style="border-color : #000000 #000000 #000000 #000000; border-style: solid;" class="mile6"><br />
             </td>




         </tr>

     </table>
    </div>

    </div>





    <script>

    var directionsRequest = {
      origin: "New York, NY", //default
      destination: "Los Angeles, LA", //default
      optimizeWaypoints: true,
      provideRouteAlternatives: false,
      travelMode: google.maps.TravelMode.DRIVING,
      drivingOptions: {
        departureTime: new Date(),
        trafficModel: google.maps.TrafficModel.PESSIMISTIC
      }
    };

    directionsRequest.origin = prompt("Enter your starting address");
    directionsRequest.destination = prompt("Enter your destination address");

    var starttime = new Date();

    var geocoder  = new google.maps.Geocoder();
    var startState;
    var currentState;
    var routeData;
    var index = 0;
    var stateChangeSteps = [];
    var borderLatLngs = {};
    var startLatLng;
    var endLatLng;

    directionsService = new google.maps.DirectionsService();
    directionsService.route(directionsRequest, init);

    function init(data){
        routeData = data;
        displayRoute();
        startLatLng = data.routes[0].legs[0].start_location;
        endLatLng = data.routes[0].legs[0].end_location;
        geocoder.geocode({location:data.routes[0].legs[0].start_location}, assignInitialState)

    }

    function assignInitialState(data){
        startState = getState(data);
        currentState = startState;
        compileStates(routeData);

    }

    function getState(data){
        for (var i = 0; i < data.length; i++) {
            if (data[i].types[0] === "administrative_area_level_1") {
                var state = data[i].address_components[0].short_name;
            }
        }
        return state;
    }

    function compileStates(data, this_index){
        if(typeof(this_index) == "undefined"){
            index = 1;
            geocoder.geocode({location:data.routes[0].legs[0].steps[0].start_location}, compileStatesReceiver);
        }else 
        {
            if(index >= data.routes[0].legs[0].steps.length){
                console.log(stateChangeSteps);
                index = 0;
                startBinarySearch();
                return;
            }
            setTimeout(function(){ 
                    geocoder.geocode({location:data.routes[0].legs[0].steps[index].start_location}, compileStatesReceiver);
                    $("#status").html("Indexing Step "+index+"...  "+data.routes[0].legs[0].steps.length+" Steps Total");
                }, 3000)
        }

    }

    function compileStatesReceiver(response){
          state = getState(response);
          console.log(state);
          if(state != currentState){
                currentState = state;
                stateChangeSteps.push(index-1);
          }
          index++; 
          compileStates(routeData, index);

        }



    var stepIndex = 0;
    var stepStates = [];
    var binaryCurrentState = "";
    var stepNextState;
    var stepEndState;
    var step;

    var myLatLng = {lat:39.8282, lng:-98.5795};
    var map = new google.maps.Map(document.getElementById('map'), {
        zoom: 4,
        center: myLatLng
      });

    function displayRoute() {
      directionsDisplay = new google.maps.DirectionsRenderer();
      directionsDisplay.setMap(map);
      directionsDisplay.setDirections(routeData);
    }

    var orderedLatLngs = [];
    function startBinarySearch(iterating){
        if(stepIndex >= stateChangeSteps.length){
            for(step in borderLatLngs){
                for(state in borderLatLngs[step]){
                    for(statename in borderLatLngs[step][state]){
                        (JSON.stringify(borderLatLngs[step][state][statename],null, 4));
                       orderedLatLngs.push([borderLatLngs[step][state][statename], statename]); 
                    }
                }
            }
            compileMiles(true);
            return;
    //$("#results").append("<br>Cross into "+statename+" at "+

        }
        step = routeData.routes[0].legs[0].steps[stateChangeSteps[stepIndex]];
        console.log("Looking at step "+stateChangeSteps[stepIndex]);
        borderLatLngs[stepIndex] = {};
        if(!iterating){
            binaryCurrentState = startState;
        }
        geocoder.geocode({location:step.end_location}, 
            function(data){
                if(data === null){
                    setTimeout(function(){startBinarySearch(true);}, 6000);
                }else{
                    stepNextState = getState(data);
                    stepEndState = stepNextState;
                    binaryStage2(true);
                }
            });
    }

    var minIndex;
    var maxIndex;
    var currentIndex;
    function binaryStage2(init){
        if (typeof(init) != "undefined"){   

            minIndex = 0;
            maxIndex  = step.path.length - 1;    
        }
        if((maxIndex-minIndex)<2){
            borderLatLngs[stepIndex][maxIndex]={};
            borderLatLngs[stepIndex][maxIndex][stepNextState]=step.path[maxIndex];
            var marker = new google.maps.Marker({
                position: borderLatLngs[stepIndex][maxIndex][stepNextState],
                map: map,
            });
            if(stepNextState != stepEndState){
                minIndex = maxIndex;
                maxIndex = step.path.length - 1;
                binaryCurrentState = stepNextState;
                stepNextState = stepEndState;

            }else{
                stepIndex++;
                binaryCurrentState = stepNextState;
                startBinarySearch(true);
                return;
            }
        }
        console.log("Index starts: "+minIndex+" "+maxIndex);
        console.log("current state is "+binaryCurrentState);
        console.log("next state is "+ stepNextState);
        console.log("end state is "+ stepEndState);

        currentIndex = Math.floor((minIndex+maxIndex)/2);
        setTimeout(function(){
                    geocoder.geocode({location:step.path[currentIndex]}, binaryStage2Reciever);
                    $("#status").html("Searching for division between "+binaryCurrentState+" and "+stepNextState+" between indexes "+minIndex+" and "+maxIndex+"...") 
                }, 3000);


    }

    function binaryStage2Reciever(response){
        if(response === null){
            setTimeout(binaryStage2, 6000);
        }else{
            state = getState(response)
            if(state == binaryCurrentState){
                minIndex = currentIndex +1; 
            }else{
                maxIndex = currentIndex - 1
                if(state != stepNextState){
                    stepNextState = state;
                }
            }
            binaryStage2();
        }
    }

    var currentStartPoint;
    var compileMilesIndex = 0;
    var stateMiles = {};
    var trueState;
    function compileMiles(init){
            if(typeof(init)!= "undefined"){
                currentStartPoint = startLatLng;
                trueState = startState;    
            }
            if(compileMilesIndex == orderedLatLngs.length){
                directionsRequest.destination = endLatLng;
            }else{
                directionsRequest.destination = orderedLatLngs[compileMilesIndex][0];
            }
            directionsRequest.origin = currentStartPoint;
            currentStartPoint = directionsRequest.destination;
            directionsService.route(directionsRequest, compileMilesReciever)


    }



    function compileMilesReciever(data){
        if(data===null){
            setTimeout(compileMiles, 6000);
        }else{


            if(compileMilesIndex == orderedLatLngs.length){
                stateMiles[stepEndState]=data.routes[0].legs[0].distance["text"];


    var txt = "";
    var i = 0;



    for(state in stateMiles)
    {
       i++;
       $("#results").append            

       $(".state"+i).append(state);
       $(".mile"+i).append(stateMiles[state]);


    } 




                          var endtime = new Date();
                totaltime = endtime - starttime;
                //$("#results").append("<br><br>Operation took "+Math.floor(totaltime/60000)+" minute(s) and "+(totaltime%60000)/1000+" second(s) to run.");
                return;
            }else{
                stateMiles[trueState]=data.routes[0].legs[0].distance["text"];
            }
            trueState = orderedLatLngs[compileMilesIndex][1];
            compileMilesIndex++;
            setTimeout(compileMiles, 3000);
        }

    }










    </script>



    <script>

    </script>




    </script>





    </head>

    </script>



      </body>
    </html>













变量方向请求={ 来源:“纽约州纽约市”//默认值 目的地:“洛杉矶”//默认 航路点:对, ProviderRouteAlternatives:false, travelMode:google.maps.travelMode.DRIVING, 驾驶选项:{ 出发时间:新日期(), 流量模型:google.maps.trafficModel.悲观 } }; directionrequest.origin=提示(“输入起始地址”); directionrequest.destination=提示(“输入您的目的地地址”); var starttime=新日期(); var geocoder=new google.maps.geocoder(); var startState; 无功电流状态; var routeData; var指数=0; var stateChangeSteps=[]; var borderLatLngs={}; var-atlng; var endLatLng; directionsService=new google.maps.directionsService(); 路由(directionrequest,init); 函数初始化(数据){ RoutedData=数据; displayRoute(); STARTATLNG=data.routes[0]。支腿[0]。起始位置; endLatLng=data.routes[0]。支腿[0]。结束位置; geocoder.geocode({location:data.routes[0]。legs[0]。start_location},assignInitialState) } 函数赋值初始状态(数据){ startState=getState(数据); 当前状态=开始状态; 不动产(routeData); } 函数getState(数据){ 对于(变量i=0;i=data.routes[0]。legs[0]。steps.length){ console.log(stateChangeSteps); 指数=0; startBinarySearch(); 返回; } setTimeout(函数(){ geocoder.geocode({location:data.routes[0].legs[0].steps[index].start_location},compileStateSeceiver); $(“#status”).html(“索引步骤”+索引+“…”+数据.routes[0]。腿[0]。步数.length+“总步数”); }, 3000) } } 函数CompileStatestReceiver(响应){ state=getState(响应); console.log(状态); 如果(状态!=当前状态){ 当前状态=状态; stateChangeSteps.push(索引-1); } 索引++; 房地产(路线数据、索引); } var指数=0; var阶跃状态=[]; var binaryCurrentState=“”; var stepNextState; var阶跃状态; var阶跃; var Mylatng={lat:39.8282,lng:-98.5795}; var map=new google.maps.map(document.getElementById('map'){ 缩放:4, 中心:myLatLng }); 函数displayRoute(){ directionsDisplay=new google.maps.DirectionsRenderer(); 方向显示.setMap(地图); 方向显示。设置方向(路由数据); } var orderedLatLngs=[]; 函数startBinarySearch(迭代){ if(stepIndex>=stateChangeSteps.length){ 用于(步进边框){ for(在borderLatLngs[步骤]中的状态){ 对于(borderLatLngs[步骤][状态]中的statename){ (JSON.stringify(borderLatLngs[step][state][statename],null,4)); orderedLatLngs.push([borderLatLngs[step][state][statename],statename]); } } } 埃米尔斯(真); 返回; //$(“#结果”)。追加(
交叉到“+statename+”处”+ } 步骤=路由数据。路由[0]。支腿[0]。步骤[stateChangeSteps[stepIndex]; log(“查看步骤”+stateChangeSteps[stepIndex]); borderLatLngs[stepIndex]={}; 如果(!迭代){ binaryCurrentState=startState; } geocoder.geocode({location:step.end_location}, 功能(数据){ 如果(数据===null){ setTimeout(函数(){startBinarySearch(true);},6000); }否则{ stepNextState=getState(数据); stepEndState=stepNextState; 二进制阶段2(真); } }); } var minIndex; v