2009-05-24 5 views
0

Okay, also ich versuche, eine Variable über eine Javascript-Methode aufrufen. Dies funktioniert jedoch nicht. Ich googelte und beendete ip zurück und versuchte swLiveConnect, aber das ist veraltet und es stellt sich heraus, dass mein Weg jetzt der Weg ist, es zu tun. Also hier ist meine JavaScript-Funktion und ActionScript. Ich habe keine Ahnung was vor sich geht, ich verbeuge mich vor den geschickteren Actioncriptern.Javascript und Actionscript 3 [Einstellen einer Variable Probleme]

Action

//========================================================== 
function decide_proposal(e:Event):void { 
//========================================================== 
    var address1:String = form1.project_address.text + ", " + form1.project_city.text + ", " + form1.project_state.text + ", " + form1.project_zip.text; 
    var distance:Number = ExternalInterface.call("showLocation(" + address1 + ")"); 

    var commit:String = e.currentTarget.name; 
    if (form1.stories.value >= 2.5 || form1.wood_no.selected || form1.framed_sqft.value >= 5000 || form1.roof_slope.value < 3 || form1.civil.selected || form1.cmt.selected || form1.commercial.selected || form1.c.selected || distance >= 180 || form1.bore_holes1.value >= 4) { 
     send_proposal(e); 
    } else if (commit == "quote") { 
     perform_calculations(distance); 
    } else { 
     send_proposal(e); 
    } 
} 

Javascript

var geocoder; 
var location1; 


function initialize() { 
    geocoder = new GClientGeocoder(); 
} 
function showLocation(address) { 
    var locations = 0; 
    geocoder.getLocations(address, function (response) { 
     if (!response || response.Status.code != 200) 
     { 
      alert("There was an error"); 
     } 
     else 
     { 
      location1 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0]}; 
     } 
    }); 
    var glatlng1 = new GLatLng(location1.lat, location1.lon); 
    var brenham = new GLatLng(30.152289,-96.384881); 
    var college_station = new GLatLng(30.610584,-96.306002); 
    var miledistance1 = glatlng1.distanceFrom(brenham); 
    var miledistance2 = glatlng1.distanceFrom(college_station); 

    if (miledistance1 <= miledistance2) { 
     locations = (miledistance1 * .000621371192); 
    } else { 
     locations = (miledistance2 * .000621371192); 
    } 
    return locations; 
} 
window.onload=function() {initialize();} 

Ich bin ziemlich sicher, dass es etwas mit Rückkehr zu tun hat, aber ich bin nicht sicher. An diesem Punkt habe ich versucht zu verfolgen, welche Adresse an die Funktion übergeben wird, ist es richtig. Ich habe verfolgt, was die Entfernung vor und nach dem Anruf eingestellt ist. Vorher, NaN; nach, 0. Von Firebug bekomme ich die richtige Nummer. Ich weiß es einfach nicht.

Antwort

1

Okay, das Problem war einfach. Ich habe die Parameter falsch an die Funktion übergeben. Hier ist, wie Sie es tun:

var distance:Number = ExternalInterface.call("showLocation", address1); 

Annnnd Bob ist dein Onkel.

+0

Bitte wählen Sie Ihre eigene Antwort als die 'ausgewählte Antwort' –

+1

Oh Liebes. "Doh!" Nun, meine Antwort klang gut. :-) –

+0

Haha, ich landete immer noch mit deinem Code Curt, es war einfach besser so, egal ob es mein Problem gelöst hat. Wer weiß, selbst wenn ich es gelöst hätte, hätte ich wahrscheinlich immer noch tun müssen, was Sie gesagt haben. Dmitri, sie lassen Sie 48 Stunden warten, bevor Sie Ihre eigene Antwort auswählen können. Ab sofort kann ich es immer noch nicht tun. Werde wenn ich kann! Danke nochmal Curt. –

2

Stellen Sie sicher, dass allowScriptAccess = "always" im HTML-Objekt/Einbettungscode vorhanden ist.

+0

ich tun und haben Hinzuzufügen ist, dass ich ein paar andere Tasten, die ExternalInterface.call() 's erfolgreich zu machen. Trotzdem danke. –

+1

Ich tauchte tiefer in diese Lösung, und es stellt sich heraus, dass Sie den Parameter AND Objekt Embed Code immer einstellen müssen. Es löste das Problem nicht, aber das wusste ich nicht. Abbildung, die hilfreich für jeden sein wird, der in Zukunft darauf stößt. Nur eine gute Sache, im Allgemeinen zu wissen, ich erlaubeScriptAccess. –

1

Ich bin nicht wirklich sicher, dass aber ... es zu versuchen:

function showLocation(address) { 
    var locations = geocoder.getLocations(address, function (response) { 
     if (!response || response.Status.code != 200) 
     { 
       alert("There was an error"); 
     } 
     else 
     { 
       location1 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0]}; 
       var glatlng1 = new GLatLng(location1.lat, location1.lon); 
       var brenham = new GLatLng(30.152289,-96.384881); 
       var college_station = new GLatLng(30.610584,-96.306002); 
       var miledistance1 = glatlng1.distanceFrom(brenham); 
       var miledistance2 = glatlng1.distanceFrom(college_station); 

       if (miledistance1 <= miledistance2) { 
         return (miledistance1 * .000621371192); 
       } else { 
         return (miledistance2 * .000621371192); 
       } 
     } 
    }); 
    return locations; 
} 
+0

Okay, ich habe das gemacht und es hat mir eine Idee gegeben, und ich habe festgestellt, dass die Variable nicht auf irgendetwas eingestellt ist. Ich denke, dass ich etwas anderes tun muss, als zurückzukehren, aber ich weiß nicht, was angemessen wäre. –

1

Das Problem scheint zu sein, dass geocoder.getLocations wird der Rückgabewert der Funktion nicht zurückkehren Sie an sie übergeben. Sie könnten versuchen, einen Verschluss zu verwenden:

function showLocation(address) { 
    var retval 
    geocoder.getLocations(address, function (response) { 
             ... // don't use another 'var retval' here 
             reval = ... 
            } 
    return retval 
} 
+0

Danke Curt. Das hat es nicht gemacht, aber ich habe es in meinen Code aufgenommen. Was ich gefunden habe, nur um die Funktion eine Zahl zurückgeben, wird nicht auf die Variable festgelegt. Ich bin mir nicht sicher, wo ich hinschauen soll, es gibt eine Frage genau hier auf stackoverflow, aber die Antwort ist genau das, was ich gemacht habe, und Google-Suchanfragen ergeben die gleiche Methode. Frustrierend, um es milde auszudrücken. –