javascript - 当从android调用带有一些js代码的php文件时,js代码是这种调用的输出

标签 javascript php android android-asynctask

我正在制作这个 Android 应用程序,但遇到了一个问题。 问题是,在我的应用程序中,一个 Activity 将用户当前位置发送到数据库,并使用这个位置引用数据库中的另一个表,我在其中获取这些值,该表由其他用户位置组成。 所以现在我想做的是使用用户当前位置并引用其他用户位置想要计算,而不是选择最近的用户,我已经继续制作了一个 .php 文件。当在网络浏览器上运行时,会显示正确的答案。但似乎在应用程序中不起作用。 请注意,php 文件使此计算使用了 javascript。 这是我在我的异步任务中调用的 php 文件,它找到最近的用户。 php文件

<?php
$response = array();
include 'db_con.php';

// run query
$query = mysqli_query($con,"SELECT *FROM friend WHERE d_status='0'");
// look through query

if (!empty($query)) {
    // check for empty result
    $response["details"] = array();
while($row =mysqli_fetch_assoc($query)){
    $details= array();
    $details["Latitude"]= $row["d_latitude"];
    $details["Longitude"]= $row["d_longitude"];
    array_push($response["details"], $details);
    }
}
        // success
    $response["success"] = 1;
    // echoing JSON response
    echo json_encode($response);

mysqli_close($con);
$lat=15.493403;
$longi=73.820617;
?>

<!DOCTYPE html>
<html>
<body>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2    /jquery.min.js"></script> 
<script type="text/javascript">
var latlon = new Array();
var map;
var lat=15.493403;//"<?php echo $lat; ?>";
var longi=73.820617;//"<?php echo $longi; ?>";
var geocoder;
var origin =new google.maps.LatLng(lat,longi); 
function mapLoad(){
            var data="<?php echo $response;?>";
            var data_parsed = JSON.parse(data);
            var resp = data_parsed['details'];  
            for (var i in resp) {

            latlon[i]=(resp[i].Latitude+","+resp[i].Longitude);
            //alert("latit:"+latlon[i]);
            }
            calculateDistances();

}
var directionsDisplay;
var directionsService = new google.maps.DirectionsService();

function calculateDistances() {

var service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix({
    origins:[origin], //array of origins
    destinations: latlon, //array of destinations
    travelMode: google.maps.TravelMode.DRIVING,
    unitSystem: google.maps.UnitSystem.METRIC,
    avoidHighways: false,
    avoidTolls: false
}, callback);   //agettaxicoor
}

function callback(response, status) {

if (status != google.maps.DistanceMatrixStatus.OK) {
    alert('Error was: ' + status);
} else {
    //we only have one origin so there should only be one row
    var routes = response.rows[0];
    //need to find the shortest 
    var lowest = Number.POSITIVE_INFINITY;
    var tmp;
    var shortestRouteIdx;
    var resultText = "Possible Routes: <br/>";
    for (var i = routes.elements.length - 1; i >= 0; i--) {
        tmp = routes.elements[i].duration.value;
        resultText += "Route " + latlon[i] + ": " + tmp + "<br/>";


        if (tmp < lowest) {
            lowest = tmp;
            shortestRouteIdx = i;
        }
    }
    //log the routes and duration.
    $('#results').html(resultText);

    //get the shortest route
    var shortestRoute = latlon[shortestRouteIdx];
    var res = JSON.stringify(shortestRoute .split(","));      

    //alert(res);
    location.href="atestb.php?Result=" + res;  //this where the result is set.
    }
    }       
</script>
<body onload="mapLoad();"></body>
</body>
</html>

但现在的问题是,当我在 eclipse 中使用调试工具时,我看到了

之后的整个代码

文档类型 html

成为异步任务 json 调用的输出。

所以基本上我想做的就是从应用程序调用这个 php 文件,它应该计算最近的用户并返回最近用户到应用程序的纬度和经度值。可能通过更新同一个 php 文件变量或像上述情况一样更新另一个 php 文件变量 我知道这可能不是执行此操作的正确方法,所以任何帮助都是不合适的。

最佳答案

您无法通过直接从 Android 源代码调用来执行 javascript。当您调用服务器时,它会返回一个内容流,就是这样!由于您的网络服务正在返回 javascript,因此 android 代码将 js 代码显示为字符串。

您应该将 js 逻辑转换为 php 并返回计算结果,或者在您的应用程序中使用能够执行 js 并将结果传递给您的 webview。你可以咨询这个:How to execute JavaScript on Android?

编辑:有这个库在后台创建webview并执行javascript(注意:我自己没有测试过这个库)

https://github.com/evgenyneu/js-evaluator-for-android

关于javascript - 当从android调用带有一些js代码的php文件时,js代码是这种调用的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23263823/

相关文章:

android - Expo 中的相机预览失真

javascript - JS从django模板标签获取数据

javascript - 如何从 HTML 5 Canvas 动画链接

php - 也获取适用于 Woocommerce 产品变体的 is_purchasable Hook

php - mysql插入日期时间不输出正确的时间

java - 如何折叠主 fragment 工具栏和主工具栏?

javascript - 新手问题: What is the correct way to pass error message from ajax calls?

javascript - 将纯 JavaScript 哈希转换为正确的对象

php - 如何在 laravel 5.7 中测试 mongo 连接?

android - 如何在 ActionBarSherlock 中设置标题颜色?