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

时间:2016-02-04 14:01:37

标签: javascript php jquery ajax google-maps

我有一个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;
}

3 个答案:

答案 0 :(得分:1)

答案是肯定和否定,所以解决方案并非完全直截了当

由于您只能让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';

这是一个基本的大纲,你当然必须添加一些代码来回顾数据,但这是基本的大纲          }

答案 1 :(得分:0)

我建议你将一个GET参数传递给php脚本。这看起来如下:

的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函数的参数,但这就完全可以了。

答案 2 :(得分:0)

Php基本上从上到下运行。在浏览器中调用文件就可以了。 如果文件包含函数定义但没有调用代码,则不会运行任何内容。

要解决您的问题,您需要:

  1. 确定要调用的函数
  2. 检查它是一个允许的功能,以避免恶意代码注入
  3. 调用函数
  4. 为此,您可以将所需的函数作为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