使用Php,mySql,ajax,(xmlhttp)和JS,如何创建一个php多维将它发送给JS并使用它?

时间:2014-12-16 14:22:07

标签: javascript php ajax mysqli xmlhttprequest

我在互联网上看了很多,但却无法找到我需要的答案,所以我来找你。 我有什么:一个如下所示的数据库:

name  latitude  longitude
---- --------- ----------
foo    13.323   -51.356
foo    54.698   2.487

我想做什么:我需要从使用php完成的mysqli请求中检索纬度和经度,并在我定义的函数中使用它。

我的问题:我正在尝试使用xmlrequest,但它显然无效。

代码: JS:

var selI = document.getElementById("nameIti");    
selI.onchange = function(){
                var val = this[this.selectedIndex].getAttribute("value");
                showMark(val);
            }
function showMark(str){
            var xhr;
            if(str==""){
                return;
            }
            if(window.XMLHttpRequest){
                xhr=new XMLHttpRequest();
            }
            else{
                xhr=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xhr.onreadystatechange=function(){
                if(xhr.readyState==4 && xhr.status ==200){
                    var object = JSON.parse(xhr.responseText);
                    for(var a in object){
                    newMark(v['lat'], v['lng']);
                    document.getElementById("pi").innerHTML=JSON.parse(xrh.responseText); // This is a test to display any kind of result.
                    }                       
                }
            }
            xhr.open("GET", "getpos.php?q="+str, true);
            xhr.send();
        }   

PHP:

<?php
$nom = $_GET['q'];

include("connexion.php");
$con = connect_LIF4();
$req1= "SELECT Latitude, Longitude FROM etape LEFT JOIN itineraires ON NomLieu=nomEtape WHERE nomIti LIKE '%$nom%'";
$result1 = mysqli_query($con, $req1);

$data = array();
while($row = mysqli_fetch_array($result1){
    $data['lat'] = $row['Latitude'];
    $data['lng'] = $row['Longitude'];
    $resp[] = $data;
}
echo json_encode($resp);
mysqli_close($con);
?>

我尝试在onreadystatechange之外的showMark中使用随机值的newMark(lat,lng)(我编码并且工作正常)并且它可以工作,但是我需要将它与从php中检索的值一起使用。

1 个答案:

答案 0 :(得分:1)

PHP的一个问题是

while($row = mysqli_fetch_array($result1){

缺少第二个支撑。它应该是:

while($row = mysqli_fetch_array($result1)){

ajax请求中的URL也应该是完整的URL,而不仅仅是getpos.php

第三,你写了xrh.responseText(应该是xhr)。

基本上你的代码中存在大量的语法错误 - 你应该使用javascript控制台来调试前端的,以及后端的PHP日志记录或错误显示。一旦您调试了所有明显的语法错误,您应该只需要帮助。

编辑 - 下面是一个工作示例(虽然我还没有完成MySQL部分)

JS + HTML:

<span id='pi'></span>
<select id='nameIti'>
    <option value='foo'>foo</option>
    <option value='bar'>bar</option>
</select>

<script>

function newMark(lat,lng) {
    console.log(lat);
    console.log(lng);
}

var selI = document.getElementById("nameIti");
selI.onchange = function(){
                var val = this[this.selectedIndex].getAttribute("value");
                showMark(val);
            }

function showMark(val){

    var str=val;
    var xhr;
    // if(str==""){
    //     return;
    // }
    if(window.XMLHttpRequest){
        xhr=new XMLHttpRequest();
    }
    else{
        xhr=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhr.onreadystatechange=function(){
        if(xhr.readyState==4 && xhr.status ==200){
            var result = JSON.parse(xhr.responseText);
            console.log(result);
            for(var a in result){
                newMark(result[a]['lat'], result[a]['lng']);
                document.getElementById("pi").innerHTML = result[a]['lat'] + ', ' + result[a]['lng'];
            }
        }
    }
    // xhr.open("GET", "getpos.php?q="+str, true);
    xhr.open("GET", "getpos.php?q="+str, true);
    xhr.send();
}
</script>

PHP:

<?php
$nom = $_GET['q'];

$data = array();
if($nom == 'foo') {
  $data['lat'] = '5.12';
  $data['lng'] = '0.34';
  $resp[] = $data;
}
else if($nom == 'bar') {
  $data['lat'] = '2.34';
  $data['lng'] = '1.34';
  $resp[] = $data;
}
echo json_encode($resp);
?>