Javascript 我能够从JS文件对PHP文件中的特定函数进行AJAX调用吗

Javascript 我能够从JS文件对PHP文件中的特定函数进行AJAX调用吗,javascript,php,jquery,ajax,google-maps,Javascript,Php,Jquery,Ajax,Google Maps,我有一个Javascript函数,它可以拉入用户的纬度/经度,并将其存储在一个数组中供以后使用。我试图做的是获取用户的纬度/经度,并与存储在数据库中的其他几个纬度/经度进行距离比较。我试图做的是,我可能认为这是错的,在Javascript中使用AJAX调用PHP文件中的特定函数。该函数从数据库中提取每个相关存储的纬度/经度。通常,这应该很容易,但是PHP文件中有多个函数,所以我想知道是否可以通过这种方式实现 提前感谢您提供的任何帮助。我对这一切还不熟悉,所以非常感谢你的耐心 这是到目前为止我所拥

我有一个Javascript函数,它可以拉入用户的纬度/经度,并将其存储在一个数组中供以后使用。我试图做的是获取用户的纬度/经度,并与存储在数据库中的其他几个纬度/经度进行距离比较。我试图做的是,我可能认为这是错的,在Javascript中使用AJAX调用PHP文件中的特定函数。该函数从数据库中提取每个相关存储的纬度/经度。通常,这应该很容易,但是PHP文件中有多个函数,所以我想知道是否可以通过这种方式实现

提前感谢您提供的任何帮助。我对这一切还不熟悉,所以非常感谢你的耐心

这是到目前为止我所拥有的代码,我是AJAX的新手,所以我还没有编写任何AJAX代码:

function userPosition() {

  navigator.geolocation.getCurrentPosition(function(position) {
  var lat = position.coords.latitude;
  var lng = position.coords.longitude;
  currentPos.push(lat, lng);

  }, function(error) {
    alert('Error occurred. Error code: ' + error.code);
    // error.code can be:
    //   0: unknown error
    //   1: permission denied
    //   2: position unavailable (error response from location provider)
    //   3: timed out
  });
};
以下是PHP文件中的代码:

    public function get_closest_location() {
    $addresses = array();
    $i = 0;
    //Get primary address
    $addresses[$i]['lat'] = $this->dealer_info['lat_1'];
    $addresses[$i]['lng'] = $this->dealer_info['lng_1'];

    //Get Dealer Addresses
    global $wpdb;
    $results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->gdp_dealers_addresses WHERE dealerId = %d", $this->dealer_info['dealer_id'] ), ARRAY_A );

    foreach($results as $res){
        $i++;
        $addresses[$i]['lat'] = $res['lat'];
        $addresses[$i]['lng'] = $res['lng'];

    }

    return $addresses;
}

我建议您向php脚本传递一个GET参数。这将如下所示:

javascript:

$.post( "script.php?action=userPosition", { lat: "2.0123123", long: "2.0319239123" })
  .done(function( data ) {
    alert( "Data Loaded: " + data );
});    
将其附加到php文件:

if (isset($_GET["action"]) && $_GET["action"] == "userPosition") {   
    echo get_closest_location($_POST["lat"], $_POST["long"]);
    exit;
}

显然,您需要修改php函数的参数,但这就足够了。

php基本上是自上而下运行的。从浏览器调用文件ftom就可以做到这一点。 如果文件包含函数定义,但没有调用代码,则不会运行任何操作

要处理您的问题,您需要:

确定要调用的函数 检查它是否是允许的函数,以避免恶意代码注入 调用函数 为此,您可以将所需函数作为get参数发送,对照白名单进行检查,然后调用它:

//example.php

function somefunc(){}
function anotherfunc(){}
function privatefunc(){}

function onLoad(){
    $func = isset($_GET['func']) ? $_GET['func'] : false;
    $allowed = ['somefunc','anotherfunc'];
    if(in_array($func, $allowed){
        call_user_func($func);
    }
}
//call onload function when script is executed
onLoad();

要调用函数,您需要在ajax请求中使用正确的查询字符串,例如/example.php?func=somefunc

答案是肯定和否定的,因此解决方案并不完全是直截了当的

由于只能让AJAX直接运行PHP脚本,而不能在其中运行函数,因此只需向发送到PHP脚本的POST数据中添加一些信息,告诉它希望在PHP库中运行什么函数

因此,您可以向发布的变量中添加类似的内容

var params  = {.........};

$.ajax({
  method: "POST",
  url: "some.php",
  data: { toRun: 'userPosition', anyData: params }
})
.done(function( msg ) {
    alert( msg );
});
然后在PHP中,这是您测试的第一件事

<?php

     // check for existance of all required post variables
     switch ($POST['toRun']) {

     case : 'userPosition'
         // get any other parameters out of POST array you may need
         $params = array(.....);
         userPosition();
         break;

     case : 'otherFunction'
        ...
        ...

     default :
        echo 'Huston we have a problem';
这是一个基本的大纲,您当然需要添加更多的代码来处理传回的数据,但这是一个基本的大纲
}

是的,你能做到。但如何做到这一点是一个太宽泛的问题。你需要说明你的问题是什么,并可能提供一些代码。你有可能提供的例子吗?我完全迷路了,在网上找不到任何东西。不知道你的问题是什么,很难给你准确的指针。你不能向phpscript传递帖子或获取参数吗?这将使事情变得更清楚,您可以轻松地检测$\u POST参数并返回函数callI的结果。我在上面编辑了我的注释,以包含我的代码。再一次,我是AJAX的新手,所以我不知道如何继续。很抱歉。接下来,您将制作一个基本的路由器。我强烈推荐您使用谷歌(google)的一个漂亮的现代php微框架slim、silex、fatfreephp,它将有一个更健壮的实现,还有更多。重新发明轮子很少是个好主意。编写原始php通常属于这一类