从php返回多个字符串到ajax

时间:2015-06-01 14:17:26

标签: javascript php jquery ajax

我一直在寻找一个简单的解决方案,用于从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>&nbsp;<br/><span class="name2"><a>Text here</a></span><br/>
            </div>
        </div>
        <?php
    }
}
?>

我需要能够将www.example.com替换为与每个搜索结果相关联的href(来自search.php网址)。

我读过的解决方案类型一直在使用json数组来返回数据,尽管到目前为止我还没有实现任何优点。任何可行解决方案的指针或链接都将受到赞赏。谢谢。

1 个答案:

答案 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');
}