2014-10-10 53 views
0

我有一个谷歌地图/标记应用程序,我想使用的标记ID在一个MySQL查询,以提取与在ListView标记数据点击标记时。使用MySQL查询JavaScript变量和填充的ListView

该变量是单击标记时分配的,我正在使用ajax将值传递给php文件以用于mysql查询中使用的变量。

JS

function bindInfoWindow(marker, map, infoWindow, html) { 
    google.maps.event.addListener(marker, 'click', function() { 
     infoWindow.setContent(html); 
     infoWindow.open(map, marker); 
     var site_id = marker.get("id");  
     $.ajax({ 
      url: 'getoffer.php', 
      type: "POST", 
      data: { site: site_id}, 
      success: getoffers 
     });  
    }); 
} 

成功时,我叫getoffers功能,填充与数据库值列表视图。

var output1 = '';  
function getoffers() { 
    $.post("getoffer.php?getjson", function(data) { 
     var data = JSON.parse(data); 
     console.log(data); 
     $.each(data, function(index, value){ 
      output1 += '<li data-id='+ value.offer_id +'><a href="#"">' + value.offer_title + '</a></li>'; 
     }); 
     $('#offerlist').html(output1).listview().listview('refresh'); 
    }); 
} 

PHP

<?php 
$site = $_POST['site_id']; 
require("dbconnect.php"); 
try { 
    $DBH = new PDO("mysql:host=$server;dbname=$database;charset=utf8", $username, $password, 
     array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")); 
} 
catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

$STH = $DBH->prepare("SELECT * FROM Offer WHERE site_id='$site'"); 
$STH->execute(); 
$arr = $STH->fetchAll(); 
echo json_encode($arr); 
die(); 

当我运行的应用程序没有错误,但ListView控件是空白。

当我从sql中删除ajax代码和where子句时,代码将返回该表中的所有值,所以我知道它适用于db连接和输出到listview。我必须错误地通过ajax传递的变量,或者如果我不正确地调用代码。

任何意见非常感谢。谢谢

+0

要发布的名为值'SI te'(在第一个例子中),但在PHP中,您正在检索'site_id'。不知道为什么你要在'getoffers()'中再次发布'getoffer.php' * *,并且没有任何'site'或'site_id'。你可能只需要'data'作为'getoffers()'的参数。 – 2014-10-10 15:13:00

回答

0

由于某种原因,你在成功函数中做了一个单独的ajax请求。成功函数将已经传递给它的数据,因此只需取下第二Ajax请求:

function getoffers(data) { 
    //$.post("getoffer.php?getjson", function(data) { 
     var data = JSON.parse(data); 
     console.log(data); 
     $.each(data, function(index, value){ 
      output1 += '<li data-id='+ value.offer_id +'><a href="#"">' + value.offer_title + '</a></li>'; 
     }); 
     $('#offerlist').html(output1).listview().listview('refresh'); 
    //}); 
} 

此外,由@保罗Roub注意到,您的文章数据密钥不与你的php,要么改变匹配在阿贾克斯的数据:

data: { site_id: site_id}, 

改变你的PHP使用密钥site

$site = $_POST['site']; 
+0

和Paul Roub。谢谢你们帮我解决了这个问题:)我没有意识到我是两次打电话给阿贾克斯的。非常感激。 – DanBeard 2014-10-10 15:27:13