gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:09 24 4
gpt4 key购买 nike

我正在制作这个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com