【发布时间】:2011-01-31 18:29:53
【问题描述】:
我有一个使用 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"> </span>
</div>
</div>
现在,来自 mousemove 位置的 'block'、'x_coords' 和 'y_coords' 变量工作正常并显示在 span 标签中,但它没有从 AJAX 函数获取 PHP 变量,我不明白为什么。
我也不知道怎么做,所以当点击鼠标时,它会从 fetch.php 获取变量并将用户引导到诸如“/user/view/?id=VAR_ID_NUMBER”之类的页面
我是在用错误的方式处理这个问题,还是做错了?任何人都可以帮忙吗? :)
【问题讨论】:
-
为了网络服务器的爱,请不要在不受限制的 mousemove 回调中执行网络活动!
-
鼠标移动 AJAX 调用可以快速杀死您的服务器。您是使用从 mousemove Ajax 调用返回的数据,还是想让它为鼠标单击做好准备?因为,最好只用鼠标点击来获取它的数据并重定向。
-
哦,忽略我最后的评论。我看到您使用的是一个图像 div。
-
你能发布你的 fetch.php 代码吗?它是否返回格式有效的 JSON 结果?
-
但是拜托拜托,请限制mousemove功能。
标签: php jquery html ajax mousemove