2009-05-24 9 views
0

さて、javascriptメソッド呼び出しで変数を設定しようとしています。しかし、これは動作していません。私はグーグルで立ち往生し、swLiveConnectを試して終了しましたが、それは時代遅れであり、私の方法が判明したので、これを行う方法です。だから私のjavascript関数とactionscriptです。私は何が起こっているのかわからない、私はより熟練したactionscriptersの前に弓。JavascriptとActionscript 3 [変数の不安定さの設定]

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.ファイヤーバグから私は正しい番号を取得します。私は分かりません。

答えて

1

問題は簡単でした。私は間違って関数にパラメータを渡していた。ここではあなたがそれを行う方法は次のとおりです。

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

Annnndボブのあなたの叔父。

+0

「選択された回答」として独自の回答を選択してください –

+1

ああああ。 「ドー!まあ、私の答えはよかった。 :-) –

+0

母、私はまだあなたのコードのカルトを含めて終わった、それは私の問題を解決したかどうかにかかわらず、そのようにちょうど良い方法でした。あなたが知っていることは、たとえ私がそれを解決したとしても、あなたが言ったことをやる必要があったと思います。 ドミトリー、あなたはあなた自身の答えを選択する前に48時間待つ。現在のところ、私はまだそれを行うことはできません。私はすることができますか? もう一度ありがとうございます。 –

2

HTMLオブジェクト/埋め込みコードでallowScriptAccess = "always"を使用していることを確認してください。

+0

私はExternalInterface.call()が正常に動作するようにいくつかのボタンが追加されています。ありがとう、結構です。 –

+1

私はこの解決策を深く掘り下げ、paramとobjectの埋め込みコードを常に設定する必要があることが判明しました。それは問題を解決しなかったが、私はそれを知らなかった。今後これを見ている人にとって役立つ図です。一般的に知るべきことは、allowScriptAccessという意味です。 –

1

私はそれについて本当によく分からないけど...それを試してみる:

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

さて、私はこれを行い、それは私にアイデアを与え、変数が何にも設定されていないことがわかりました。私はリターン以外の何かをする必要があると思っていますが、何が適切かはわかりません。 –

1

問題がgeocoder.getLocationsは、あなたがそれに渡された関数の戻り値を返していないことのように見えます。閉鎖を試みることができます:

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

ありがとうございました。それはできませんでしたが、私はそれを私のコードに含めました。関数が数値を返すようにしただけでも、変数に設定されていないことがわかりました。私はどこに見えるかわからない、正確にこれはここstackoverflowのような質問があるが、答えはまさに私がやったものであり、Googleの検索は同じ方法を回す。最小限に抑えるために挫折。 –

関連する問題