$('element').droppable({
drop:function(event, ui){
$.ajax({
url: '/path/to/my/file.php',
type: 'POST',
data: {'left' : ui.helper.position().left,
'top': ui.helper.position().top},
success: function(data){
//do something with the response from the server
}
});
}
});
而在/path/to/my/file.php
if(isset($_POST['left'])):
$db = new mysqli('connection info here');
$q = $db->prepare('INSERT INTO some_table (left, top) VALUES (?,?)'); //prepare the statement
$q->bind_param('ss', $_POST['left'], $_POST['top']); //safe binding
if(FALSE !== $q->execute()):
return 'Query Executed!';
endif; //execute the statement
return false;
endif;
因此,在 php 文件中,我们只是检查$_POST
变量是否存在left
。我们假设 top 也将可用。我们建立一个 mysqli 连接,准备一个安全语句,将参数绑定为strings
,使用$_POST
left/topvalues。然后我们检查执行是否没有返回假(返回真/假),如果没有,我们传递一个值并一起退出条件。如果没有,默认情况下会触发 return false。
编辑
从您的评论中,您希望保存用户执行的操作,直到准备好实际执行插入,这也很容易实现。
var dc = 0,
drops = {};
dc
将是dropcount
,并且drops
将是一个对象。
$('element').droppable({
drop: function(event, ui){
drops[dc] = {'left' : ui.helper.position().left, 'top' : ui.helper.position().top};
dc++;
}
});
在上面,我们简单地通过drops
对象递增,存储每个 drop 的 left/top 值的信息。
$('.save').click(function(e){
e.preventDefault();
$.ajax({
url: 'test.php',
type: 'POST',
data: {'drops': drops},
success: function(data){
console.log(data);
}
});
});
在这里,我们有一个保存类的保存按钮,我们阻止默认操作,然后我们将 drop 对象发送到服务器。
if(isset($_POST['drops'])):
//same process as outlined above, use a helper function to insert the rows
endif;
现在我们检查 $_POST 变量 'drops' 的存在,我们将采用与上面相同的策略。我会简单地推荐一个 helper function saveDrops($obj)
,迭代返回的 drop 并对传入的每个 obj 执行保存。