我一直在寻找一个简单的解决方案,用于从PHP脚本返回html和href到AJAX,以便在单击自动完成的搜索结果时,客户端直接到另一个页面。简而言之,javascript看起来像这样:
<script type="text/javascript">
$(function () {
$(".search").keyup(function () {
var searchid = $(this).val();
var dataString = 'search=' + searchid;
if (searchid != '') {
$.ajax({
type: "POST",
url: "search.php",
data: dataString,
cache: false,
success: function (html) {
$("#result").html(html).show();
}
});
}
return false;
});
jQuery("#result").live("click", function (e) {
var $clicked = $(e.target);
var $name = $clicked.find('.name').html();
var decoded = $("<div/>").html($name).text();
$('#searchid').val(decoded);
});
jQuery(document).live("click", function (e) {
var $clicked = $(e.target);
if (!$clicked.hasClass("search")) {
window.location.href = 'www.example.com';
}
});
$('#searchid').click(function () {
jQuery("#result").fadeIn();
});
});
</script>
我的php说:
<?php
include('db.php');
if ($_POST) {
$q = $_POST['search'];
$sql_res = mysql_query("select name, type, image_location, linkout from search_terms where name like '%$q%' order by name LIMIT 5");
while ($row = mysql_fetch_array($sql_res)) {
$username = $row['name'];
$type = $row['type'];
$img_loc = $row['image_location'];
$b_username = '<strong>' . $q . '</strong>';
$final_username = str_ireplace($q, $b_username, $username);
$type_class = "show";
?>
<div class="show" align="left">
<img src=<?php echo "$img_loc"; ?> style="width:50px; height:50px; float:left; margin-right:6px;" />
<div class="show inbox">
<span class="name1"><?php echo ucfirst($final_username); ?></span> <br/><span class="name2"><a>Text here</a></span><br/>
</div>
</div>
<?php
}
}
?>
我需要能够将www.example.com替换为与每个搜索结果相关联的href(来自search.php网址)。
我读过的解决方案类型一直在使用json数组来返回数据,尽管到目前为止我还没有实现任何优点。任何可行解决方案的指针或链接都将受到赞赏。谢谢。
答案 0 :(得分:0)
最简单的解决方案是使用href属性将每个结果块包装在一个锚(a
标记)中。如果您不想更改这样的标记结构,可以使用HTML属性:
为每个结果提供包装元素(看起来像div.show
)给我一个HTML5数据属性,然后从JS引用它。
所以在php改变:
<div class="show" align="left">
是
<div class="show" align="left" data-url="<?= htmlentities($resultUrl); ?>">
在JS改变
var $clicked = $(e.target);
if (! $clicked.hasClass("search")){
window.location.href='www.example.com';
}
到
var $clicked = $(e.target).closest('div.show');
if ($clicked.length) {
window.location.href = $clicked.attr('data-url');
}