jQuery自动完成功能出现问题。基本上,我有一个搜索栏,当您键入要查找的jQuery代码时,我调用了一个php脚本,该脚本执行MySQL查询并返回我需要的所有内容,并相应地填写文本框。然后,我要做的就是获取从该自动完成中获得的值,并在另一个自动完成中使用它来填充更多数据。棘手的部分是,我需要通过第二个查询获取的数据位于与第一个查询不同的表中,后者共享一个关系。我的问题是我需要一个完全独立的函数来执行此操作,还是可以将两个查询都放入1个php脚本中,并将第一个查询的信息用于第二个查询。
任何帮助表示赞赏,谢谢!
这是jQuery函数:
$(function() {
/* $('#abbrev').val("");
*/
$("#q16_location16").autocomplete({
source: "location_query.php",
minLength: 1,
select: function(event, ui) {
$('#q16_location161').val(ui.item.LocationID);
$('#SystemName').val(ui.item.SystemName);
$('#SiteAddress1').val(ui.item.SiteAddress1);
$('#SiteAddress2').val(ui.item.SiteAddress2);
$('#SiteCPP').val(ui.item.SiteCPP);
$('#Contact').val(ui.item.Contact);
$('#SiteLocationHours').val(ui.item.SiteLocationHours);
}
});
});
和PHP脚本:
/* If connection to database, run sql statement. */
if ($conn)
{
$fetch = mysql_query("
SELECT Location.LocationID,
Location.SystemName,
Location.SiteAddress1,
Location.SiteAddress2,
CONCAT_WS(' ', Location.SiteCity, Location.SiteProvince, Location.SitePostalCode) AS SiteCPP,
CONCAT_WS(' ', Location.ContactName, Location.ContactPhone, Location.ContactEmail) AS Contact,
Location.SiteLocationHours,
CONCAT_WS(' ', SystemName, SiteNameLocation, SiteAddress1, SiteCity, SiteProvince, SitePostalCode) as expr2
FROM Location
WHERE Location.SystemName like '%".mysql_real_escape_string($_GET['term'])."%'
OR Location.SiteNameLocation like '%".mysql_real_escape_string($_GET['term'])."%'
OR Location.SiteAddress1 like '%".mysql_real_escape_string($_GET['term'])."%'
OR Location.SiteCity like '%".mysql_real_escape_string($_GET['term'])."%'
OR Location.SiteProvince like '%".mysql_real_escape_string($_GET['term'])."%'
OR Location.SitePostalCode like '%".mysql_real_escape_string($_GET['term'])."% '
LIMIT 0,15");
/* Retrieve and store in array the results of the query.*/
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
$row_array['LocationID'] = $row['LocationID'];
$row_array['value'] = $row['expr2'];
$row_array['SystemName'] = $row['SystemName'];
$row_array['SiteAddress1'] = $row['SiteAddress1'];
$row_array['SiteAddress2'] = $row['SiteAddress2'];
$row_array['SiteCPP'] = $row['SiteCPP'];
$row_array['Contact'] = $row['Contact'];
$row_array['SiteLocationHours'] = $row['SiteLocationHours'];
array_push($return_arr,$row_array);
}
}
/* Free connection resources. */
mysql_close($conn);
/* Toss back results as json encoded array. */
echo json_encode($return_arr, $return_arr2);
因此,当用户输入“纽约”时,他们可以选择该选项。在我的示例中,纽约的ID为5。我还有一个查询,它选择纽约的不同街道,但这是在单独的表中。但是,在我的街道表中,有一个“ LocationID”列,对于纽约的每条街道,其值均为5。因此,当用户进入纽约并通过“不同的表也具有该ID。在创建新函数方面,我已经尝试了多种方法,但是我不确定如何将该ID传递给函数。
谢谢
最佳答案
您可以为此使用一个PHP脚本。这是我认为基本结构的外观:
将两个值传递给“ location_query.php”。第一个值将是您要查询的表的名称。第二个值可以是自动完成文本框中的选择结果。
从传递给“ location_query.php”的两个值中,在“ location_query.php”中创建一个准备好的语句。
执行查询。
JSON编码结果(就像您之前所做的一样)。
我还要指出您的代码存在安全问题。您应该使用Mysqli和prepared statements而不是PHP的MySQL,并且mysql_real_escape_string.
mysql_real_escape_string
已显示出可能导致安全漏洞的安全缺陷,并且不推荐使用PHP的MySQL类。 Mysqli和Prepared语句更安全,并且在我看来,它们提供了更整洁的代码,因为它允许将SQL和参数分开。
希望这可以帮助!
编辑:我想我知道您现在要做什么,但是我认为有更好的方法去做。与将id值分配给隐藏字段并尝试让jquery在每次更改该字段时进行检测相比,我将执行以下操作:
对于第一个文本框的选择方法:
select:function(event, ui) {
$.get("location_query.php", {
searchterm:$(ui).val()
}, yourFunction);
}
这是“ queryFinished”的示例实现:
function queryFinished(data, textStatus, jqXHR) {
var mJSON = $.parseJSON(data);
/* mJSON is the parsed JSON data returned from your "location_query.php"
script.*/
//TODO the rest of your code
}
这是怎么回事:
我们定义了一个自定义函数,当第一个文本框选择了一个新项目时将调用该函数。此功能的唯一目的是在“ location_query.php”上调用
GET
。然后,我们通过
GET
调用从第一个文本框中传递所选字段的值。然后,我们创建一个在GET返回时要调用的函数。
最后,我们解析“ location_query.php”返回的编码的JSON。之后,您可以使用解析的JSON(在我们的示例中为mJSON)执行所需的任何任务。
采用这种方法可以使我们不必担心“侦听”隐藏ID字段中的值更改,并使所有内容都变得干净整洁。
关于javascript - jQuery自动填充文本框,其中包含来自另一个自动填充的信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18947736/