[英]how can i create a widget that loads asynchronously using ajax, js and php
[英]Using Php, mySql, ajax, (xmlhttp) and JS,how can i create a php multidimensional send it to JS and use it?
我在互联网上看了很多东西,却找不到我需要的答案,所以我来找你。 我所拥有的:一个像这样的数据库:
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);
?>
我试图将newMark(lat,lng)(我编码并可以正常工作)与随机值一起使用,在onreadystatechange之外的showMark中,它可以工作,但是我需要将其与从php检索的值一起使用。
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);
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.