【发布时间】:2015-07-15 05:38:11
【问题描述】:
我已使用 JSON 编码从 PHP 文件成功设置 jQuery 自动完成调用。我成功地将 KVP(键值对)数组发送回我的 HTML。
我遇到的问题是,我希望将部分数组项发送到一个 id="sometag1" 并将其他数组项发送到 id="sometag2" 和 id="sometag3"。
这是我的 javascript jquery 代码:
jQuery(document).ready(function(data) {
$('#edit-ad-location').autocomplete({
source: '/postcodes-latlong.php',
minLength: 2
});
});
文件“postcodes-latlong.php”包含以下代码:
if ( $rs && mysql_num_rows($rs) )
{
while( $row = mysql_fetch_array($rs, MYSQL_ASSOC) )
{
$new_row = $row['post_title'];
if ($new_row != $this_row) {
$data[] = array(
'id' => $row['meta_id'],
'label' => $row['post_title'] ,
'value' => $row['post_title'] ,
);
}
if ($row['meta_key'] == "_aphs_FYN_latitude") {
$data[count($data) -1]["geo-search-lat"] = $row['meta_value'];
}
if ($row['meta_key'] == "_aphs_FYN_longitude") {
$data[count($data) -1]["geo-search-lng"] = $row['meta_value'];
}
$this_row = $row['post_title'];
}
}
// jQuery wants JSON data
echo json_encode($data);
flush();
如果 term 4000 被传递,我们会得到以下返回数组:
[{
"id":"364307",
"label":"4000, BRISBANE",
"value":"4000, BRISBANE",
"geo-search-lat":"-27.46758",
"geo-search-lng":"153.027892"
},{
"id":"364322",
"label":"4000, BRISBANE ADELAIDE STREET",
"value":"4000, BRISBANE ADELAIDE STREET",
"geo-search-lat":"-27.466517",
"geo-search-lng":"153.027495"
},{
"id":"364337",
"label":"4000, SPRING HILL",
"value":"4000, SPRING HILL",
"geo-search-lat":"-27.460873",
"geo-search-lng":"153.024454"
}]
我想要实现的是将 ID、标签和值发送到带有 id:"#edit-ad-location" 的自动完成字段 - 这工作正常。
我还希望将纬度和经度值发送到另外两个id标签#geo-search-lat和#geo-search-lng,如下所示:
`<div .... id="geo-search-lat" value=""> </div>`
和
`<div .... id="geo-search-lng" value=""> </div>`
我尝试过执行以下操作(使用 3 个单独的标签,每个 id 一个)但这不起作用:
`jQuery(document).ready(function(data){
$('#edit-ad-location', '#geo-search-lat', '#geo-search-lng').autocomplete({source:'/postcodes-latlong.php', minLength:2});
});`
如何将返回的 JSON 数组中的 geo-search-lat 和 geo-search-lng 值传递给:
mapDiv.gmap3({
getgeoloc:{
callback : function(latLng){
if (latLng){
jQuery('#geo-search-lat').val(latLng.lat());
jQuery('#geo-search-lng').val(latLng.lng());
}
}
}
});
【问题讨论】:
-
我发现您的 php 代码有问题:
$data[] = array_push($data...)不正确,它在数组中插入数字。请修复并报告 JSON(一旦您的 JSON 修复,PHP 代码将变得无关紧要)。 -
另外:我希望将纬度和经度值发送到另外两个 id 标签 预期的行为是什么?当用户从列表中选择一个选项时,您要填写这些字段(例如,用户选择“4503,KALLANGUR”,而其他两个框填充 -27.25075 和 152.99)还是您想要其他内容?
-
在花了很多时间解决这个问题后,我注意到以下 jQuery 代码可能会有所帮助: mapDiv.gmap3({ getgeoloc:{ callback : function(latLng){ if (latLng){ jQuery('#geo -search-lat').val(latLng.lat()); jQuery('#geo-search-lng').val(latLng.lng()); } } } });
-
我希望将纬度和经度值发送到 div 标签,所以我们有: id="geo-search-lat" value="-27.25075" 和 id="geo-search-lng" value="152.99" - 这些值在 HTML 请求中传递。此外,我尝试过“array_merge”、“array_splice”,但无法将数据“插入”到数组中。它似乎将它添加到最后,但不是在数组“内部”。
-
您希望在用户从列表中选择一个选项之后 填充文本框,对吗?至于您的 PHP 问题,我 认为(未测试)您可以简单地添加如下键:
$data[count($data) -1]["geo-search-lat"] = <meta_value>.
标签: jquery arrays json autocomplete latitude-longitude