2014-02-27 100 views
0

我試圖讓一個javascript對象變成一個php數組。JavaScript到PHP數組

我想在php腳本中使用results[j].distance.textresults[j].duratio.text。我使用Google的API獲取經度和距離經度和緯度的距​​離。

但是,我如何獲得這些客戶端數據到服務器端(PHP)?

我想我需要做一個AJAX調用,但我不知道該怎麼做。

希望你們能幫助我。謝謝。

我的代碼如下:

var map; 
var geocoder; 
var bounds = new google.maps.LatLngBounds(); 
var markersArray = []; 
var origin1 = new google.maps.LatLng(<?php echo $lat;?>, <?php echo $long;?>); 
var destinationA = 'Min adresse, Aarhus'; 
var destinationIcon = 'https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld=D|FF0000|000000'; 
var originIcon = 'https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld=O|FFFF00|000000'; 

function initialize() { 
    var opts = { 
    center: new google.maps.LatLng(<?php echo $lat;?>, <?php echo $long;?>), 
    zoom: 10 
    }; 
    map = new google.maps.Map(document.getElementById('map-canvas'), opts); 
    geocoder = new google.maps.Geocoder(); 
} 

window.onload = function calculateDistances(){ 
    var service = new google.maps.DistanceMatrixService(); 
    service.getDistanceMatrix(
    { 
     origins: [origin1], 
     destinations: [destinationA], 
     travelMode: google.maps.TravelMode.DRIVING, 
     unitSystem: google.maps.UnitSystem.METRIC, 
     avoidHighways: false, 
     avoidTolls: false 
    }, callback); 
}; 


function callback(response, status) { 
    if (status != google.maps.DistanceMatrixStatus.OK) { 
    alert('Error was: ' + status); 
    } else { 
    var origins = response.originAddresses; 
    var destinations = response.destinationAddresses; 
    var outputDiv = document.getElementById('outputDiv'); 
    outputDiv.innerHTML = ''; 
    deleteOverlays(); 

    for (var i = 0; i < origins.length; i++) { 
     var results = response.rows[i].elements; 
     addMarker(origins[i], false); 
     for (var j = 0; j < results.length; j++) { 
     addMarker(destinations[j], true); 
     outputDiv.innerHTML += origins[i] + ' til ' + destinations[j] 
      + ': ' + results[j].distance.text + ' tid til destination ' 
      + results[j].duration.text + '<br>'; 
     } 
    } 
    } 
} 

function addMarker(location, isDestination) { 
    var icon; 
    if (isDestination) { 
    icon = destinationIcon; 
    } else { 
    icon = originIcon; 
    } 
    geocoder.geocode({'address': location}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     bounds.extend(results[0].geometry.location); 
     map.fitBounds(bounds); 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: results[0].geometry.location, 
     icon: icon 
     }); 
     markersArray.push(marker); 
    } else { 
     alert('Geocode was not successful for the following reason: ' 
     + status); 
    } 
    }); 
} 

function deleteOverlays() { 
    for (var i = 0; i < markersArray.length; i++) { 
    markersArray[i].setMap(null); 
    } 
    markersArray = []; 
} 

回答

0

你將不得不作出一個AJAX調用。

我建議你看看jQuery。它爲您提供了一個易於理解的AJAX如何工作的實現,並且還可以幫助您處理響應。 (成功,錯誤等)

它提供了一個很好的清晰的語法,如:

$.ajax({ 
url:"handlePage.php", 
data:{json object here}, 
dataType:"json", 
success:function(jd){ 
    console.log("SUCCESS"); 
}}); 

你可以閱讀更多關於它在這裏:

jQuery Ajax Page

傳遞數據的最佳方式PHP和JavaScript之間將會利用JSON。

JavaScript對象可以呈現爲JSON對象。 PHP由將這些對象解碼爲數組的功能組成。

JSON Tutorial

對於PHP解碼此,你將不得不看看PHP的json_decode()和json_encode()函數:

PHP: json_encode manual PHP: json_decode manual

希望這有助於!

0

我沒有看過完整的代碼,但可以通過以下步驟回答:

  • 在提交或什麼的,創建一個字符串數組,用逗號分隔。
  • 在逗號的服務器端分割字符串,你有你的PHP陣列

例如:

<input name="tb1" class="testCreate" value="v1" /> 
<input name="tb2" class="testCreate" value="v2" /> 

<script> 
    var result = $('.testCreate').map(function() {return this.value;}).get().join(','); 

    $.ajax({ 
     url: "Path/to/file", 
     type: "POST", 
     cache: false, 
     data: "value=" + result, 
     success: function (html) { 
      //Do somehting when done 
     } 
    }); 
</script> 

而且服務器端得到:

<?php 
$array = implode(",", $_POST["value"]); 
?>