如何将Ajax返回值传递给PHP变量

3
我是一名有帮助的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我知道这个问题被问了很多次,但没有一个正确的解决方案。我正在使用 AJAX 从 PHP 页面获取响应。在获得响应后,我想要使用 PHP 变量中的值。以下代码可以获得结果,但我对它的使用感到困惑。

以下是我的 index.php

function getLocation() {
     if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(geoSuccess, geoError);
        } else {
            alert("Geolocation is not supported by this browser.");
        }
    }

    function geoSuccess(position) {
        var glat = position.coords.latitude;
        var glng = position.coords.longitude;
        //alert("lat:" + glat + " lng:" + glng);
        geocoding(glat,glng);
      }

    function geoError() {
        alert("Geocoder failed.");
    }
    function geocoding(glat,glng){
        $.ajax({
        type:'POST',
        url:'geolocation.php',
        data:'latitude='+glat+'&longitude='+glng,
        success:function(result){
            if(result){
               $("#locationg").val(result);
               $("#htmllocation").html(result);
           }
        }
    });
   }

geolocation.php

<?php
session_start();
if(!empty($_POST['latitude']) && !empty($_POST['longitude'])){
    //Send request and receive json data by latitude and longitude
    $url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.trim($_POST['latitude']).','.trim($_POST['longitude']).'&sensor=false';
    $json = @file_get_contents($url);
    $data = json_decode($json);
    $status = $data->status;
    if($status=="OK"){
        //Get address from json data
        $location = $data->results[0]->formatted_address;
        //$location = $data->results[0]->address_components;

        for($j=0;$j<count($data->results[0]->address_components);$j++){
               $cn=array($data->results[0]->address_components[$j]->types[0]);
           if(in_array("locality", $cn))
           {
            $city= $data->results[0]->address_components[$j]->long_name;
           }
            }

     }else{
        echo 'No Location';
    }

    echo $city;
}
?>

index.php

<?php
    $city='<span id="htmllocation"></span>';
?>

当我执行echo $city时,我得到了城市名,但在检查元素中显示如下:
<span id="htmllocation">Visakhapatnam</span>

问题是我无法在MYSQL中使用这种HTML格式,我只想得到城市名称而不是其他内容。
希望我的问题清楚明了,如果不清楚,请留下评论。

你可以使用strip_tags函数来删除HTML标签,只获取城市。 - Amit Gupta
你想在哪里使用城市的名称? - klenium
在index.php页面中 - Asesha George
3个回答

0

使用PHP最初启动会话

sessionstart()

方法。然后在上述代码后面添加以下代码。 首先使用Jquery设置会话,如下所示:

$.session.set("yoursessioname", "storevalue");

然后在 PHP 中尝试获取此会话变量,代码如下:
$city = $_SESSION['yoursessioname'];

我还没有尝试过。希望它有所帮助。:)


您可以使用Jquery在成功函数中设置会话变量。 - Pranay Pujari
客户端会话和服务器端 PHP 会话是不同的东西。JQuery-Session-Plugin - klenium

0
使用PHP内置函数strip_tags从语句中删除HTML标签,以获取变量中的城市,如下所示:
$city = strip_tags('<span id="htmllocation">Visakhapatnam</span>');
// Output will be Visakhapatnam only

纠正你的回答,防止有人给出空结果 - Asesha George
@AseshaGeorge 请在您的本地主机上单独检查它,或者在 http://phptester.net/ 这样的 PHP 测试站点上检查它,它应该可以正常工作。 - Amit Gupta
@AseshaGeorge 确保城市实际上是从 $data->results[0]->address_components[$j]->long_name 获取的。 - Amit Gupta
是的,阿米特,它应该可以工作。请检查问题,它不是<span id="htmllocation">Visakhapatnam</span>,而只是在显示 Visakhapatnam 的 span 标签中的一个 ID <span id="htmllocation"></span>。 - Asesha George

0
  • 用户定位到 example.com/index.php,它会显示一个网页。
  • 您可以从 JS 中获取用户的位置。
  • 您将其发送回服务器,并获取该位置的地址。
  • 然后,您想从 index.php 访问这些地址。

如果是这样,那么您无法这样做。Web 服务器使用请求-响应模型。当您的 PHP 完成时,服务器会终止该进程,即 $city 和其他所有内容都被销毁。之后,您才能获取用户的位置。如果您想再次从服务器获取某些内容,则必须发送新请求,因为 index.php 的进程不再可用。在从客户端获取城市名称之前,无法获得该名称,也无法在已停止运行的进程中访问它。

你所需要做的就是在 geolocation.php 中运行你的 SQL 查询。当你从 Google 获取到结果后,再从你的数据库中获取数据。这里的 $city 不包含任何 HTML 代码,只有纯粹的城市名称。然后向用户发送与该城市相关的一些数据,并将其显示出来。

我想在首页上显示用户的当前位置,并显示与该城市相关的MySql结果。为此,我使用ajax将lat、lng发布到PHP页面以获取确切的城市名称,并在index.php上使用它而不刷新页面,因此我将值传递到#htlmlocation id中。为了获取与该城市相关的MySQL记录,我需要将ajax响应传递给PHP变量。 - Asesha George
我尝试将其存储在会话中,但至少需要刷新页面一次。 - Asesha George
你读了我写的吗?你永远无法在第一页加载城市相关数据,这就是为什么你需要使用AJAX调用。使用会话是无用的。 - klenium

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接