Javascript и Actionscript 3 [Установка переменной горе] - PullRequest
0 голосов
/ 25 мая 2009

Хорошо, я пытаюсь установить переменную с помощью вызова метода javascript. Однако это не работает. Я погуглил и закончил ip, возвращаясь и пробуя swLiveConnect, но это устарело, и оказалось, что мой путь - теперь способ сделать это. Итак, вот моя функция JavaScript и ActionScript. Я понятия не имею, что происходит, я кланяюсь перед более опытными сценаристами.

Actionscript

//==========================================================
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();}

Я вполне уверен, что это как-то связано с возвратом, но я не уверен. На данный момент я попытался отследить, какой адрес передается в функцию, это правильно. Я проследил, какое расстояние установлено до и после вызова. До, NaN; после 0. От Firebug я получаю правильный номер. Я просто не знаю.

Ответы [ 4 ]

2 голосов
/ 25 мая 2009

Убедитесь, что у вас есть allowScriptAccess = "always" в объекте HTML / коде для встраивания.

1 голос
/ 25 мая 2009

Хорошо, проблема была проста. Я передавал параметры функции неправильно. Вот как вы это делаете:

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

Энннд Боб, твой дядя.

1 голос
/ 25 мая 2009

Проблема заключается в том, что geocoder.getLocations не возвращает возвращаемое значение функции, которую вы ему передали Вы можете попробовать использовать замыкание:

function showLocation(address) {
    var retval
    geocoder.getLocations(address, function (response) {
                                       ... // don't use another 'var retval' here
                                       reval = ...
                                   }
    return retval
}
1 голос
/ 25 мая 2009

Я не совсем уверен в этом, но ... попробуй:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...