JQuery AJAX вызов мыши - PullRequest
       4

JQuery AJAX вызов мыши

3 голосов
/ 31 января 2011

У меня есть изображение, созданное с помощью gdimage, которое имеет 40000 блоков 5x5, связанных с различными пользовательскими профилями, и я хочу, чтобы при наведении курсора на один из этих блоков AJAX шел и извлекал этот профиль из базы данных, обнаруживая x иy указывает, когда он перемещается по изображению.

Затем, когда на него нажимают, с информацией, которую он получил, ссылка на этот профиль пользователя.

Вот что я получил до сих пор:

Javascript / jQuery:

<script type="text/javascript">

    jQuery.fn.elementlocation = function() {

        var curleft = 0;
        var curtop = 0;

        var obj = this;

        do {

        curleft += obj.attr('offsetLeft');
        curtop += obj.attr('offsetTop');

        obj = obj.offsetParent();

        } while ( obj.attr('tagName') != 'BODY' );


            return ( {x:curleft, y:curtop} );

    };


    $(document).ready( function() {

        $("#gdimage").mousemove( function( eventObj ) {

            var location = $("#gdimage").elementlocation();
            var x = eventObj.pageX - location.x;
            var x_org = eventObj.pageX - location.x;
            var y = eventObj.pageY - location.y;
            var y_org = eventObj.pageY - location.y;

            x = x / 5;
            y = y / 5;

            x = (Math.floor( x ) + 1);
            y = (Math.floor( y ) + 1);

            if (y > 1) {

                block = (y * 200) - 200;
                block = block + x;

            } else {

                block = x;

            }

            $("#block").text( block );
            $("#x_coords").text( x );
            $("#y_coords").text( y );

                $.ajax({
                    type: "GET",
                    url: "fetch.php",
                    data: "x=" + x + "&y=" + y + "",
                    dataType: "json",
                    async: false,
                    success: function(data) {
                        $("#user_name_area").html(data.username);
                    }
                });

        });

    });

</script>

PHP:

<?

    require('connect.php');

    $mouse_x = $_GET['x'];
    $mouse_y = $_GET['y'];

    $grid_search = mysql_query("SELECT * FROM project WHERE project_x_cood = '$mouse_x' AND project_y_cood = '$mouse_y'") or die(mysql_error());

    $user_exists = mysql_num_rows($grid_search);

    if ($user_exists == 1) {

        $row_grid_search = mysql_fetch_array($grid_search);

        $user_id = $row_grid_search['project_user_id'];


        $get_user = mysql_query("SELECT * FROM users WHERE user_id = '$user_id'") or die(mysql_error());

        $row_get_user = mysql_fetch_array($get_user);

        $user_name = $row_get_user['user_name'];
        $user_online = $row_get_user['user_online'];

        $json['username'] = $user_name;
        echo json_encode($json);

    } else {

        $json['username'] = $blank;
        echo json_encode($json);

    }

?>

HTML

<div class="tip_trigger" style="cursor: pointer;">

    <img src="gd_image.php" width="1000" height="1000" id="gdimage" />

    <div id="hover" class="tip" style="text-align: left;">
        Block No. <span id="block"></span><br />
        X Co-ords: <span id="x_coords"></span><br />
        Y Co-ords: <span id="y_coords"></span><br />
        User: <span id="user_name_area">&nbsp;</span>
    </div>

</div>

Теперь переменные 'block', 'x_coords' и 'y_coords' из местоположения mousemove работают нормально и отображаются в тегах span, но не получают переменные PHP из функции AJAX, и яне могу понять, почему.

Я также не знаю, как это сделать, чтобы при щелчке мыши она брала переменные, взятые из fetch.php, и направляла пользователя на страницу, например "/ user /view /? id = VAR_ID_NUMBER "

Я приближаюсь к этомуэто неправильный путь, или делать это неправильно?Кто-нибудь может помочь?:)

Ответы [ 2 ]

3 голосов
/ 31 января 2011

Пожалуйста, смотрите комментарии о том, что не делает выборку с каждым движением мыши.Плохо, плохо, плохо.Используйте некоторое регулирование.

Тем не менее, проблема в том, что вы никоим образом не используете результат в функции успеха.

Ваша функция PHP ничего не возвращает браузеру.Переменные PHP волшебным образом не становятся доступными для вашего клиентского JavaScript.PHP просто запускается, создает HTML-страницу в качестве вывода и отправляет ее в браузер.Затем браузер анализирует информацию, которая была ему отправлена, в зависимости от ситуации.

Вам нужно изменить ваш fetch.php, чтобы получить некоторую правильно отформатированную строку JSON с нужными вам данными.Это выглядело бы как { userid: 2837 }.Например, попробуйте:

echo "{ userid: $user_id, username: $user_name }";

В вашем обратном вызове успеха первый аргумент, который jQuery передаст этой функции, будет результатом анализа (надеюсь, правильно отформатированного) результата JSON, чтобы он стал правильным объектом JavaScript,Затем в обратном вызове успеха вы можете использовать результат следующим образом:

//data will contain a JavaScript object that was generate from the JSON
//string the fetch.php produce, *iff* it generated a properly formatted
//JSON string.
function(data) { 
  $("#user_id_area").html(data.user_id);
}

Измените ваш пример HTML следующим образом:

User ID: <span id="user_id_area">&nbsp;</span>

Где showHover - вспомогательная функцияэто на самом деле показывает парение.

Вот схема для регулировки функции перемещения мыши:

jQuery.fn.elementlocation = function() {

    var curleft = 0;
    var curtop = 0;

    var obj = this;

    do {

    curleft += obj.attr('offsetLeft');
    curtop += obj.attr('offsetTop');

    obj = obj.offsetParent();

    } while ( obj.attr('tagName') != 'BODY' );


        return ( {x:curleft, y:curtop} );

};


$(document).ready( function() {

    var updatetimer = null;
    $("#gdimage").mousemove( function( eventObj ) {
        clearTimer(updatetimer);
        setTimeout(function() { update_hover(eventObj.pageX, eventObj.pageY); }, 500);
    }


    var update_hover = function(pageX, pageY) {
        var location = $("#gdimage").elementlocation();
        var x = pageX - location.x;
        var y = pageY - location.y;

        x = x / 5;
        y = y / 5;

        x = (Math.floor( x ) + 1);
        y = (Math.floor( y ) + 1);

        if (y > 1) {

            block = (y * 200) - 200;
            block = block + x;

        } else {

            block = x;

        }

        $("#block").text( block );
        $("#x_coords").text( x );
        $("#y_coords").text( y );

        $.ajax({
            type: "GET",
            url: "fetch.php",
            data: "x=" + x + "&y=" + y + "",
            dataType: "json",
            async: false,
            success: function(data) {
                //If you're using Chrome or Firefox+Firebug
                //Uncomment the following line to get debugging info
                //console.log("Name: "+data.username);
                $("#user_name_area").html(data.username);
            }
        });

    });

});
0 голосов
/ 31 января 2011

Можете ли вы показать нам код PHP?Используете ли вы json_encode для возвращаемых данных?

Альтернативой может быть просто сделать изображение фоном для контейнера <div> и расположить элементы <a> в <div> там, где они вам нужныпросто привяжите jQuery к их обработчику кликов.

Это также имеет свои преимущества, если браузер не поддерживает jQuery или javascript, поскольку вы действительно можете поместить нужный URL-адрес в атрибут HREF привязки.Таким образом, если jQuery не включен, ссылка будет загружена нормально.

Скелетная реализация будет выглядеть следующим образом:

Пример CSS

#imagecontainer {
background-image: url('gd_image.php'); 
width: 1000px; 
height: 1000px;
position: relative;
}

#imagecontainer a {
height: 100px;
width: 100px;
position: absolute;
}

#block1 {
left: 0px;
top: 0px;
}

#block2 {
left: 100px;
top: 0px;
}

Пример HTML

<div id="imagecontainer">
<a href="" id="block1"></a>
<a href="" id="block2"></a>
</div>

Пример jQuery

$(document).ready(function(){
$("#block1").click(function(){ /* do what you need here */ });
});
...