2012-12-27 40 views
6

मैं Google की DistanceMatrixService के साथ थोड़ा सा खेल रहा हूं। नीचे दिया गया कोड काम करता है, लेकिन, मैं कॉलबैक फ़ंक्शन में एक और पैरामीटर कैसे पास कर सकता हूं या कॉलबैक से मूल्यों में से एक को कैसे पकड़ सकता हूं?कॉलबैक के लिए जावास्क्रिप्ट पास पैरामीटर या दूरी मैट्रिक्सस्टैटस में वैरिएबल वैल्यू सेट करें

उदाहरण के लिए: मैं दो divs है कि मैं (Results1 और Results2) में विभिन्न परिणाम दिखाने के लिए चाहते हैं, तो मैं सोच रहा हूँ मैं या तो
GoogleMapDistance (YourLatLong, DestLatLong तरह GoogleMapDistance कार्य करने के लिए एक और मूल्य पारित करने के लिए की जरूरत है, TheDiv)
या
कॉलबैक दस्तावेज़.getElementById ("परिणाम 1") के बाहर बाहरी रूप से परिणाम Str को पकड़ने में सक्षम हो। आंतरिक HTML = परिणाम Str;
या
फ़ंक्शन दस्तावेज़ के लौटे हुए मूल्य पर आंतरिक एचटीएम सेट करें .getElementById ("परिणाम 1")। आंतरिक HTML = GoogleMapDistance (YourLatLong, DestLatLong);

मैं अटक गया हूँ। मैं इसे कैसे पूरा कर सकता हूं? जिस तरह से यह अभी दिखता है वह यह है कि मैं केवल एक बार इस कोड को चलाने में सक्षम होने जा रहा हूं और इसे केवल एक div को लिख सकता हूं।

<div id="Results1"></div> 
<div id="Results2"></div> 

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> 
<script> 

function GoogleMapDistance(YourLatLong,DestLatLong) 
{ 
    var service = new google.maps.DistanceMatrixService(); 
    service.getDistanceMatrix(
    { 
    origins: [YourLatLong], 
    destinations: [DestLatLong], 
    travelMode: google.maps.TravelMode.DRIVING, 
    unitSystem: google.maps.UnitSystem.IMPERIAL, 
    avoidHighways: false, 
    avoidTolls: false 
    }, callback); 
} 

function callback(response, status) 
{ 
    if (status == google.maps.DistanceMatrixStatus.OK) 
    { 
    var origins = response.originAddresses; 
    var destinations = response.destinationAddresses; 
     for (var i = 0; i < origins.length; i++) 
     { 
      var results = response.rows[i].elements; 
      for (var j = 0; j < results.length; j++) 
      { 
       var element = results[j]; 
       var from = origins[i]; 
       var to = destinations[j]; 
       var distance = element.distance.text; 
       var duration = element.duration.text; 
       var ResultStr = distance + "&nbsp; (<i>" + duration + "</i>)"; 
      } 
     } 
    document.getElementById("Results1").innerHTML = ResultStr; 
    } 
} 

var YourLatLong = "45.4049,-122.797997"; 
var DestLatLong1 = "47.468893,-122.227978"; 
var DestLatLong2 = "61.221274,-149.831545"; 

GoogleMapDistance(YourLatLong,DestLatLong1); 

</script> 

उत्तर

11

आप नहीं बदल सकते हैं कि किस तरह Google कॉलबैक कहता है, लेकिन आप इसे कॉलबैक के रूप में अपने स्थानीय रूप से फ़ंक्शन को कॉल करें और फिर उस (एक बंद के माध्यम से) की तरह वांछित अतिरिक्त तर्क जोड़ने के बाद एक और कॉलबैक कॉल कर सकते हैं इस:

function GoogleMapDistance(YourLatLong,DestLatLong, item) 
{ 
    var service = new google.maps.DistanceMatrixService(); 
    service.getDistanceMatrix(
    { 
    origins: [YourLatLong], 
    destinations: [DestLatLong], 
    travelMode: google.maps.TravelMode.DRIVING, 
    unitSystem: google.maps.UnitSystem.IMPERIAL, 
    avoidHighways: false, 
    avoidTolls: false 
    }, function(response, status) {callback(response, status, item)}); 
} 

या, आप सिर्फ अपने कॉलबैक इनलाइन निर्धारित कर सकते हैं तो यह सीधे माता पिता समारोह चर की पहुंच है:

function GoogleMapDistance(YourLatLong,DestLatLong, item) 
{ 
    var service = new google.maps.DistanceMatrixService(); 
    service.getDistanceMatrix(
    { 
    origins: [YourLatLong], 
    destinations: [DestLatLong], 
    travelMode: google.maps.TravelMode.DRIVING, 
    unitSystem: google.maps.UnitSystem.IMPERIAL, 
    avoidHighways: false, 
    avoidTolls: false 
    }, function callback(response, status) 
    { 
     // you can access the parent scope arguments like item here 
     if (status == google.maps.DistanceMatrixStatus.OK) 
     { 
     var origins = response.originAddresses; 
     var destinations = response.destinationAddresses; 
      for (var i = 0; i < origins.length; i++) 
      { 
       var results = response.rows[i].elements; 
       for (var j = 0; j < results.length; j++) 
       { 
        var element = results[j]; 
        var from = origins[i]; 
        var to = destinations[j]; 
        var distance = element.distance.text; 
        var duration = element.duration.text; 
        var ResultStr = distance + "&nbsp; (<i>" + duration + "</i>)"; 
       } 
      } 
     document.getElementById("Results1").innerHTML = ResultStr; 
     } 
    } 

)} 
+0

धन्यवाद! मैं आपके पहले समाधान के साथ गया था। यह बहुत अच्छा काम करता है। – Soren

+1

यदि मुझे आपके पहले विकल्प में इस कॉलबैक (प्रतिक्रिया, स्थिति, आइटम) के शरीर में कोई अन्य कॉलबैक 'आइटम (some_arg)' के रूप में नहीं जोड़ा जाएगा, तो क्या यह नहीं है? – SASM