无法通过ajax返回我想要的内容(Google地理编码)

时间:2016-06-03 12:39:00

标签: php jquery ajax

我有5个输入字段,每周一天。它们会在keyup上保存到变量中,该变量根据console.log工作。

<script>
    $(document).ready(function(){
        console.log("Ready!");
        $("input[type='text']").keyup(function() {
            console.log("Something changed");

            var mon = $("#mon").val();
            var tue = $("#tue").val();
            var wed = $("#wed").val();
            var thu = $("#thu").val();
            var fri = $("#fri").val();

            console.log("Monday means:" + mon);

            $.ajax({
              type: "post",
              url: "map.php",
              data: 'mon=' + mon + '&tue=' + tue + '&wed=' + wed + '&thu=' + thu + '&fri=' + fri,
              dataType: 'json',
              success: function(data){
                console.log("Your data is:" + data);
              },  
            });
        });
    });
</script>

然而,我没有返回“不工作”或我实际上正在追求的东西。如果php文件中的API调用失败,那么不应该返回“Not working”吗?

// This is not returning anything
if($_POST['mon']) {
    $mon = $_POST['mon'];

    // Working fine manually entered into the web browser
    $urlMon = "https://maps.googleapis.com/maps/api/geocode/json?address=".$mon."&key=myKey123";
    $jsonMon = json_decode(file_get_contents($urlMon), true);
    $address = $jsonMon['results']['formatted_address'];

    if(isset($address)) {
        echo json_encode($address);
    } else {
        echo json_encode("Not working");
    }
}

我知道ajax本身正在工作,因为这是有效的:

// This returns the variable I sent according to the console log.
if($_POST['mon']) {
    $mon = $_POST['mon'];
    echo json_encode($mon);
}

我对此非常陌生,我确信我已经错过了一些明显/做错的事情。

提前致谢

3 个答案:

答案 0 :(得分:1)

你没有在console.log()调用中看到任何内容的原因是因为你明确告诉jQuery期望得到json结果。而且,即使您在错误文本上调用json_encode(),它仍然只是纯文本,jQuery不能解释为json。既然你告诉它期待json并且它没有得到它,那么success回调就不会发生。删除dataType: 'json',除非你知道你将总是获得json响应或b。)也有错误回调。

我们遇到错误情况的原因是因为$jsonMon['results']['formatted_address']应该是$jsonMon['results'][0]['formatted_address']。您还需要对要发送到maps API的地址进行urlencode。

答案 1 :(得分:0)

我看到两个错误:

$address = $jsonMon['results']['formatted_address'];

应该是

$address = $jsonMon['results'][0]['formatted_address'];

收到第一个结果。

其次,改变

} else {
    echo json_encode("Not working");
}

} else {
    echo "Not working";
}

你应该好。

答案 2 :(得分:-2)

你必须这样写

$urlMon= file_get_contents("https://maps.googleapis.com/maps/api/geocode/json?address=".$mon."&key=myKey123");
$results = json_decode($urlMon,true);
echo $results['results'][0]['formatted_address'];