2016-05-06 4 views
0

Ich versuche, einen Walkscore aus der Walkscore-API zu bekommen. Ich mache die AJAX-Anfrage an meine PHP-Datei, ich bekomme die Antwort, aber ich bekomme "Unerwartete Ende der JSON-Eingabe", wenn ich versuche, die Wanderwege zu alarmieren.wayscore API JSON-Fehler

Dies ist die PHP ist

<? 
function getWalkScore($lat, $lon, $address) { 
    $address=urlencode($address); 
    $url = "http://api.walkscore.com/score?format=json&address=$address"; 
    $url .= "&lat=$lat&lon=$lon&wsapikey=KEY"; 
    $str = @file_get_contents($url); 
    return $str; 
} 

$lat = $_GET['lat']; 
$lon = $_GET['lon']; 
$address = stripslashes($_GET['address']); 
$json = getWalkScore($lat,$lon,$address); 
echo $json; 
?> 

und das ist mein Ajax-Aufruf (wenn ich es direkt über die URL testen, ist es mir ein perfekt json formatiert Ergebnis gibt):

function loadStats() { 

var geocoder = new google.maps.Geocoder; 
var latlngStr = $("#loadStats").attr("data-latlng").split(',', 2); 
var latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])}; 
var reverseAddress=''; 

geocoder.geocode({'location': latlng}, function(results, status) { 
if (status === google.maps.GeocoderStatus.OK) { 
    if (results[1]) { 
    map.setZoom(11);  

    /*** Getting address needed for Walkability API call ***/ 
    reverseAddress = results[1].formatted_address; 
    //alert (parseFloat(latlngStr[0])); 
    //alert(parseFloat(latlngStr[1])); 
    //alert(reverseAddress); 
    $.ajax({ 
     type:"GET",       
     url:"scripts/walkscore.php", 
     data: {"address" : reverseAddress , 
       "lat" : parseFloat(latlngStr[0]), 
       "lng" : parseFloat(latlngStr[1])        
    },      
    success: function(response){ 
    var obj = $.parseJSON(response); 
    alert(obj.walkscore);    
    } 
    }); 

    } else { 
    alert('No results found'); 
     } 
    } else { 
    alert('Geocoder failed due to: ' + status); 
    } 
}); 

//var Lat=$("#loadStats").attr("data-latlng").slice(0, $("#loadStats").attr("data-latlng").indexOf(",")) ;     
       //var Lng=$("#loadStats").attr("data-latlng").slice($("#loadStats").attr("data-latlng").indexOf(",")+1,$("#loadStats").attr("data-latlng").lenght) ; 

} 

I don Ich weiß nicht, was ich falsch mache. das ist der JSON, den ich von der API bekomme

{ "status": 1 , "walkscore": 4 , "description": "Car-Dependent" , "updated": "2016-04-04 21:15:44.699150" , "logo_url": "https://cdn.walk.sc/images/api-logo.png" , "more_info_icon": "https://cdn.walk.sc/images/api-more-info.gif" , "more_info_link": "https://www.redfin.com/how-walk-score-works" , "ws_link": "https://www.walkscore.com/score/Acres-homes-Houston-TX-USA/lat=29.852555/lng=-95.447845/?utm_source=cinquedomande.com&utm_medium=ws_api&utm_campaign=ws_api" , "help_link": "https://www.redfin.com/how-walk-score-works" , "snapped_lat": 29.8530 , "snapped_lon": -95.4480 } 
+0

Sie können keine JSON-Daten an eine GET-Anforderung übergeben. Verwenden Sie stattdessen einen POST, oder übergeben Sie die Daten ordnungsgemäß als Abfragezeichenfolge. Wenn Sie JSON zurück erwarten, setzen Sie den 'dataType' im Ajax-Aufruf auf' json' und jQuery analysiert die Antwort automatisch für Sie. – dave

+0

Danke für den Tipp, aber es funktioniert immer noch nicht. Die Datei walkscore.php stammt von der Site [link] (https://www.walkscore.com/professional/api-sample-code.php). Das Skript möchte GET-Variablen. Wenn ich zum Posten umschalte und den dataType: "json" addiere, schlägt der Ajaxanruf fehl. Ich bin nicht sicher, was das Problem an diesem Punkt ist. –

Antwort

0

Ich fand es heraus. Ich war dumm genug, lng anstelle von lon an das PHP-Skript zu übergeben.