我正在努力解决的问题:
用户输入类似08212
的邮政编码或任何美国邮政编码,jquery UI Autocomplete
调用此源文件:../src/php/registration/getFanLoc.php
,该文件针对某些字段对数据库进行查询(如下所述) )基于输入的邮政编码。
在index.php上有一个表单/ jquery:
假设所有jquery UI代码已经在此文件中
<script type="text/javascript">
$(document).ready(function()
{
$('input#zip').autocomplete({
dataType: "json",
source: "../src/php/registration/getFanLoc.php",
minLength: 3
});
});
</script>
<form method="post" id="FanDetail">
<div class="ui-widget">
<label for="zip">Zip: </label>
<input id="zip" name="zipcode" value="US Zipcode" onFocus="clearText(this)" /><br />
</div>
</form>
getFanLoc.php文件 - 查询mysql以查找与输入的5位数邮政编码对应的任何记录:
<?php
try{
///////////////////////////////////////////////////////////
$zip = mysql_real_escape_string($_GET['zipcode']); //////
///////////////////////////////////////////////////////////
require_once('../../cfg/dbi.php') or die('Cant require dbi');
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth = $dbh->prepare(
'SELECT fanDetLocID, fanDetLocCity, fanDetLocState FROM fanDetailLocation WHERE fanDetLocZip = ?');
$sth->bindParam(1, $zip);
$sth->execute();
while ($res = $sth->fetch(PDO::FETCH_ASSOC)) {
foreach($res as $column=>$val) {
$res[$i][$column] = $val;
}
$i++;
}
print json_encode($res);
}
catch(PDOException $e){
file_put_contents('../../../PDODBConnectionErrors.txt', 'ERROR: [getFanLoc.php] about '.$e->getMessage().'<br>', FILE_APPEND);
}
?>
我最初遇到了麻烦,因为它没有连接到数据库而且PDODBConnectionErrors.txt
有错误,但我已经FIXED
那部分,现在它什么也没做,但现在也不会在文件中抛出错误。有谁看到我做错了什么?我很新手和autocomplete jQuery UI widget
一起工作,所以对我很轻松:)。
我尝试过的更改:
尝试在上面的$ _GET ['zipcode']中添加,因为下面的评论者认为此插件使用的是$_GET
而不是$_POST
。将它从$ _POST更改为$ _GET是正确的,但现在我在尝试直接访问该文件时面临以下问题:
还尝试直接访问文件,如getFanLoc.php?zipcode=08039
这似乎至少让我更接近。 * 当我从这个URL访问它时,页面现在声明* False
,这让我觉得我的while() foreach()
循环是错误的。有人看起来非常强大吗?
要添加:我正在使用此插件:http://jqueryui.com/demos/autocomplete/。谢谢@Sennet
** FIXED While()循环(感谢Sennett)适用于直接访问,但不适用于表单:
$jsonArray = array();
while ($result = $sth->fetch(PDO::FETCH_ASSOC)) {
$jsonArray[] = array(
'label' => $result['fanDetLocID'],
'value' => $result['fanDetLocCity']);
}
print $jsonArray; // print results of array
print json_encode($jsonArray); // json encode that array
} // can't have code between here
// and here
catch(PDOException $e){
file_put_contents('../../../PDODBConnectionErrors.txt', 'ERROR: [getFanLoc.php] about '.$e->getMessage().'<br>', FILE_APPEND);
}
在与Sennet合作4小时后,我们现在有了:
<script type="text/javascript">
$(document).ready(function()
{ $( '输入#拉链')。自动完成({
dataType: "json",
source: "../src/php/registration/getFanLoc.php",
minLength: 3,
select: function(event, args){
event.preventDefault();
var joinedValues = args.item.value;
var id = joinedValues.split("|")[0];
var cityAndState= joinedValues.split("|")[1];
document.getElementById('actualZip').value = cityAndState ;
document.getElementById('zip').value = id;
}
});
});
答案 0 :(得分:1)
首先要做的是尝试直接访问webbrowser文件。保留为$_GET
。当您浏览到getFanLoc.php?zipcode=XXX
,其中XXX是已知存在的代码时会发生什么?你有什么结果吗?
此外,假设您正在使用this plugin,您应该返回JSON而不是超级链接 - 该插件将为您包装HTML。